Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/391.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 请求标头匹配器不工作时的Spring Boot安全许可证_Java_Spring Boot_Spring Security_Oauth - Fatal编程技术网

Java 请求标头匹配器不工作时的Spring Boot安全许可证

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

在遵循了Maven Spring Boot中有关microserves和OAuth2的教程之后,我遇到了一个问题。我想从身份验证中排除一个请求,这样就可以获取未经授权的数据。这似乎只是我做这件事的方式不起作用。有人能帮我吗

我遵循了教程:

我尝试的是:

@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");
}