Java 请求标头匹配器不工作时的Spring Boot安全许可证
在遵循了Maven Spring Boot中有关microserves和OAuth2的教程之后,我遇到了一个问题。我想从身份验证中排除一个请求,这样就可以获取未经授权的数据。这似乎只是我做这件事的方式不起作用。有人能帮我吗 我遵循了教程: 我尝试的是:Java 请求标头匹配器不工作时的Spring Boot安全许可证,java,spring-boot,spring-security,oauth,Java,Spring Boot,Spring Security,Oauth,在遵循了Maven Spring Boot中有关microserves和OAuth2的教程之后,我遇到了一个问题。我想从身份验证中排除一个请求,这样就可以获取未经授权的数据。这似乎只是我做这件事的方式不起作用。有人能帮我吗 我遵循了教程: 我尝试的是: @Configuration @EnableResourceServer public class ResourceServerConfig extends ResourceServerConfigurerAdapter { @Over
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http.requestMatcher(new RequestHeaderRequestMatcher("Authorization"))
.authorizeRequests()
.antMatchers("/**").authenticated()
.and()
.authorizeRequests()
.andMatchers(HttpMethod.GET, "/beers").permitAll();
}
}
当我尝试执行请求时,我必须进行身份验证。我如何解决这个问题
spring-security-oauth2-autoconfigure:2.1.1.RELEASE首先,您的配置与以下相同。只需删除那些不必要的重复的
authorizeRequests()
和和()
,这使它看起来更清晰:
http.requestMatcher(新的requestheaderrrequestmatcher(“授权”))
.授权请求()
.antMatchers(“/**”).authenticated()
.andMatchers(HttpMethod.GET,“/beers”).permitAll();
这意味着spring security只有在具有授权
头的情况下才会处理请求。否则,该请求将被忽略,并且不会应用任何spring安全性内容
因此,如果请求具有Authorization
头,它将根据声明顺序从上到下检查规则(即authorizationrequests()
配置的匹配器内容)。一旦匹配规则,将忽略底部规则,并且不会检查底部规则
因为您的第一个规则是匹配每个HTTP请求(“/**”),这使得它下面的所有规则永远不会执行,也没有任何意义
另一方面,如果您希望spring security完全忽略“/beers”,即使它的请求具有Authorization
头,您应该配置WebSecurity
来忽略它:
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.GET, "/beers");
}
首先,您的配置与以下相同。只需删除那些不必要的重复的
authorizeRequests()
和和()
,这使它看起来更清晰:
http.requestMatcher(新的requestheaderrrequestmatcher(“授权”))
.授权请求()
.antMatchers(“/**”).authenticated()
.andMatchers(HttpMethod.GET,“/beers”).permitAll();
这意味着spring security只有在具有授权
头的情况下才会处理请求。否则,该请求将被忽略,并且不会应用任何spring安全性内容
因此,如果请求具有Authorization
头,它将根据声明顺序从上到下检查规则(即authorizationrequests()
配置的匹配器内容)。一旦匹配规则,将忽略底部规则,并且不会检查底部规则
因为您的第一个规则是匹配每个HTTP请求(“/**”),这使得它下面的所有规则永远不会执行,也没有任何意义
另一方面,如果您希望spring security完全忽略“/beers”,即使它的请求具有Authorization
头,您应该配置WebSecurity
来忽略它:
public void configure(WebSecurity web) throws Exception {
web.ignoring()
.antMatchers(HttpMethod.GET, "/beers");
}