【问题标题】:At least one mapping is required erro in SpringSpring中至少需要一个映射错误
【发布时间】:2014-11-18 08:51:09
【问题描述】:

这里有个问题:我想保护一个 URI,直到获得一些第三方 OAuth2 的授权。基于http://docs.spring.io/spring-security/oauth/apidocs/org/springframework/security/oauth2/config/annotation/web/configuration/EnableOAuth2Client.html,我有这些:

@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
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
    // Empty for now...
}

最后

@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: 至少需要一个映射 (即 authorizeRequests().anyRequest.authenticated())

我尝试了很多 HttpSecurity 构建器的组合都无济于事 - 任何帮助,还是这种方法完全不符合标准?

【问题讨论】:

    标签: spring spring-security-oauth2


    【解决方案1】:

    这种方法完全没有根据吗?

    是的。一个空的ResourceServerConfigurerAdapter 不会帮助你。您应该配置受保护的路径,例如

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/protectedUri").authenticated();
    }
    

    (省略你的WebSecurityConfigurerAdapter)。

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

    【讨论】:

    • 是的,我留给以后的客户端配置。但是现在我摆脱了 WebSEcurityConfigurerAdapter 并将配置调用添加到 ResourceServerConfigurerAdapter 我得到 Error creation bean with name 'oauth2ClientContextFilter': Requested bean is current in creation: Is there an unresolvable circular reference?
    • 如果你把它留到以后为什么它还在?
    • 我把它留到了以后 - 这有关系吗?
    • 资源服务器不需要OAuth2ClientContextFilter,所以我猜你还有客户端配置的残余要删除?
    • 等一下 - 我正在尝试通过 docs.spring.io/spring-security/oauth/apidocs/org/… 进行操作 - 我有一个受保护的资源并希望使用第三方对其进行授权。
    猜你喜欢
    • 1970-01-01
    • 2011-07-21
    • 1970-01-01
    • 2017-11-16
    • 1970-01-01
    • 2021-08-03
    • 2021-12-16
    • 2020-01-01
    • 1970-01-01
    相关资源
    最近更新 更多