当前位置: 首页 > 知识库问答 >
问题:

Spring-Boot REST服务基本http验证排除一个endpoint

赫连晋
2023-03-14

我有一个基于Spring-Boot版本构建的仅REST微服务1.5.4.RELEASEspring-boot-starter-security。该服务没有网页,只有JSON输入和输出。用户名和密码在application.properties文件中配置。值得称赞的是http://ryanjbaxter.com/2015/01/06/securing-rest-apis-with-spring-boot/以下配置使服务器很好地实现了基本的HTTP身份验证,它接受凭据并拒绝未经授权的请求:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable().authorizeRequests() //
                .anyRequest().authenticated().and().httpBasic();        
    }
}

我的问题是,我想从基本HTTP认证中排除一个小ole路径,一个小endpoint。通过疯狂的谷歌搜索和复制粘贴,我修改了上面的内容:

    http.csrf().disable().authorizeRequests() //
        .antMatchers("/healthcheck").permitAll()
        .anyRequest().authenticated().and().httpBasic();

这会在没有警告的情况下编译和运行,但不会打开该路径进行未经验证的访问。我仍然必须提供凭据以检查服务运行状况。

我必须一个一个地匹配路径吗?我的小healthcheckendpoint在上下文路径的基础上,就像一大堆其他endpoint一样——逐个添加路径会很麻烦。

我申请的相关部分。属性文件是:

security.user.name = web-user
security.user.password = web-pass
management.security.roles=SUPERUSER

也许我需要摆弄一下角色?

请帮忙,提前谢谢。

更新1:

路径信息-我希望这个路径(以及更多的根)被保护:

localhost:8081/abcd/user

我只希望这一条路径是开放的,不需要身份验证:

localhost:8081/abcd/healthcheck

更新2:看起来我在很大程度上重复了这个3年前的问题,但我的问题没有答案被接受:

单个web应用程序路径上的spring-boot设置基本身份验证?

共有3个答案

虞承泽
2023-03-14

你说你的链接看起来像:

localhost:8081/abcd/healthcheck

试试这个:

http.csrf().disable().authorizeRequests() //
    .antMatchers("/abcd/healthcheck").permitAll()
    .anyRequest().authenticated().and().httpBasic();
马沛
2023-03-14

我已将以下内容添加到我的Springboot服务中的SecurityConfig中,并且它工作正常,我能够从基本身份验证中排除某些endpoint。

@Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/customers/**/hints", "/customers/**/search", "/customers/**/clientConfig");
    }
顾承平
2023-03-14

经过更多的实验,我发现以下工作 - @efekctive请注意,运行状况检查上没有上下文前缀:

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable().authorizeRequests()
     .antMatchers("/healthcheck").permitAll()
     .antMatchers("/**").authenticated().and().httpBasic();
}

一个大警告:当我发布此消息时,我正在测试healthcheckendpoint,通过使用伪造的http凭据调用curl,期望Spring忽略它们,但Spring总是回答401未经授权。正确的测试是在完全没有http凭据的情况下调用curl,然后healthcheckendpoint非常满意地回答。

 类似资料:
  • 问题似乎重复了,但我面临一些问题,当我遵循以下配置从这个Spring Boot战争没有嵌入tomcat排除嵌入tomcat服务器 时,我在作业中使用Spring-Web使用Rest模板调用Rest服务。

  • 我尝试了angular.js,并从一个restful api的web-ui开始(使用超文本传输协议基本授权)。这真的很好,除了授权工作。 到目前为止,我使用的是设置密码,但大多数情况下浏览器会打开http basic auth的默认登录表单。另一个奇怪的行为是angular请求不包含授权头(选项和GET请求都不包含)。我还尝试使用header配置在每个请求上设置此header,但这也不起作用。 有

  • 问题内容: 我正在尝试使用Spring Security做一个非常简单的基本身份验证。我已经正确配置了名称空间,并且服务器中没有异常。在我的“ servlet.xml”中,我获得了Spring Security的下一个: 几乎一切都完美了:没有的方法不会提示任何登录表单,而方法会提示它。问题是,或者,都不能登录那里。谁能看到我在做什么错? 提前致谢!;-) 问题答案: 自动应答 T_T为此,我花了

  • 问题 你想在网络上创建一个 HTTP 服务器。在这个方法中,我们将逐步从最小的服务器成为一个功能键值存储。 解决方案 我们将使用 node.js HTTP 库并在 Coffeescript 中创建最简单的 web 服务器。 开始 'hi\n' 我们可以通过导入 node.js HTTP 模块开始。这会包含 createServer ,一个简单的请求处理程序返回 HTTP 服务器。我们可以使用该服务

  • 我有一个创建的Spring引导Restapi,我打算从另一个应用程序调用。我如何才能以这样一种方式保护它,我只能从那个应用程序调用我的api。 我在这方面很新,所以我真的不知道怎么做,因为我是SpringSecurity的新手。 谢谢你的建议。

  • 有没有办法对/oauth/tokenendpoint禁用HTTP基本身份验证?我希望在JSON主体或请求头中发送client_id和client_secret。 我想工作的卷曲例子: 或