Spring中至少需要一个映射错误

Posted

技术标签:

【中文标题】Spring中至少需要一个映射错误【英文标题】:At least one mapping is required erro in Spring 【发布时间】: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 构建器的组合都无济于事 - 任何帮助,还是这种方法完全不符合标准?

【问题讨论】:

【参考方案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/… 进行操作 - 我有一个受保护的资源并希望使用第三方对其进行授权。

以上是关于Spring中至少需要一个映射错误的主要内容,如果未能解决你的问题,请参考以下文章

Spring Boot中Web应用的统一异常处理

带有 Maven Shade 插件的 Spring Boot - 未映射控制器(404 错误)

Spring Boot中Controller的统一异常处理

在 Spring MVC 中映射 Ajax 请求:不允许出现错误 405 方法

使用 kotlin 在 Spring Boot 中映射结构接口错误

Spring-Data-Jpa 中一对多映射的 JSON 结果错误