Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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
Spring中至少需要一个映射_Spring_Spring Security Oauth2 - Fatal编程技术网

Spring中至少需要一个映射

Spring中至少需要一个映射,spring,spring-security-oauth2,Spring,Spring Security Oauth2,这里有一个问题:我想保护URI,直到获得第三方OAuth2的授权。基于此,我有以下几点: @Configuration @EnableOAuth2Client public class OAuth2Client extends OAuth2ClientConfiguration { @Bean public Filter filter() { DelegatingFilterProxy f = new DelegatingFilterProxy();

这里有一个问题:我想保护URI,直到获得第三方OAuth2的授权。基于此,我有以下几点:

@Configuration
@EnableOAuth2Client
public class OAuth2Client extends OAuth2ClientConfiguration {

    @Bean
    public Filter filter() {
        DelegatingFilterProxy f = new DelegatingFilterProxy();
        f.setTargetBeanName("oauth2ClientContextFilter");
        return f;
    }

    @Resource
    @Qualifier("oauth2ClientContextFilter")
    private OAuth2ClientContextFilter oauth2ClientContextFilter;

    @Resource
    @Qualifier("accessTokenRequest")
    private AccessTokenRequest accessTokenRequest;

    @Bean
    public OAuth2ProtectedResourceDetails remote() {
        AuthorizationCodeResourceDetails details = new AuthorizationCodeResourceDetails();
        details.setUserAuthorizationUri("http://localhost2/oauth/authorize");
        return details;
    }

    @Bean
    public OAuth2RestOperations restTemplate() {
        return new OAuth2RestTemplate(remote(), new DefaultOAuth2ClientContext(
                accessTokenRequest));
    }

}

最后

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        super.configure(auth);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatchers().antMatchers("/protectedUri").and()
                .authorizeRequests().requestMatchers()
                .hasRole("#oauth2.hasScope('read')");

    }
}
但这给了:

java.lang.IllegalStateException:至少需要一个映射 (即授权请求().anyRequest.authenticated())

我尝试了很多HttpSecurityBuilder的组合,但都没有效果——没有任何帮助,或者这种方法是完全不正确的

这种方法是否完全偏离了基础

对。空的
ResourceServerConfigurerAdapter
对您没有帮助。您应该配置受保护的路径,例如

@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/protectedUri").authenticated();
}
(并省去您的
websecurityConfigureAdapter


顶部的客户机配置看起来也有问题,但与受保护的资源无关(如果您想知道如何配置客户机,请开始一个新问题)。

是的,我留下的客户机配置稍后再讨论。但现在我去掉了WebSecurity配置适配器,并将配置调用添加到ResourceServerConfigurerAdapter中,我在创建名为“OAuth2Client ContextFilter”的bean时出错:请求的bean当前正在创建中:是否存在无法解决的循环引用?如果您稍后将其保留,为什么它仍然存在?我没有对此进行解释稍后-这有关系吗?资源服务器不需要OAuth2ClientContextFilter,所以我猜您仍然需要删除客户端配置的剩余部分?等等-我正在尝试通过-我有一个资源受保护,希望使用第三方对其进行授权。
@Override
public void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests().antMatchers("/protectedUri").authenticated();
}