【问题标题】:Spring Security OAuth2: multiple ResourceServerConfiguration not workingSpring Security OAuth2:多个 ResourceServerConfiguration 不起作用
【发布时间】:2018-06-02 08:25:34
【问题描述】:

春季启动版本:1.5.8.RELEASE Spring Cloud 版本:Edgware.RELEASE(使用zuul)

尝试配置多个资源,在github中关注this example,无法正常工作。

我的代码是:

class ResourceServerConfigurationFactory
{
    static ResourceServerConfiguration criarResourceServerConfiguration(String resourceId, int order,
            HttpSecurityConfigurer configurer)
    {
        ResourceServerConfiguration resource = new ResourceServerConfiguration()
        {
            // Switch off the Spring Boot @Autowired configurers
            public void setConfigurers(List<ResourceServerConfigurer> configurers)
            {
                super.setConfigurers(configurers);
            }
        };

        resource.setConfigurers(Arrays.<ResourceServerConfigurer>asList(new ResourceServerConfigurerAdapter()
        {
            @Override
            public void configure(ResourceServerSecurityConfigurer resources) throws Exception
            {
                resources.resourceId(resourceId);
            }

            @Override
            public void configure(HttpSecurity http) throws Exception
            {
                configurer.configure(http);
            }
        }));

        resource.setOrder(order);

        return resource;
    }
}

interface HttpSecurityConfigurer
{
    public void configure(HttpSecurity http) throws Exception;
}

还有我的配置:

@Configuration
public class OAuthResourceConfiguration
{
    @Bean
    protected ResourceServerConfiguration usuarioResources()
    {
        return ResourceServerConfigurationFactory.criarResourceServerConfiguration("usuario", -10,
                http -> http.antMatcher("/user").authorizeRequests().anyRequest().permitAll());
    }

    @Bean
    protected ResourceServerConfiguration funcaoResources()
    {
        return ResourceServerConfigurationFactory.criarResourceServerConfiguration("funcao", -20,
                http -> http.antMatcher("/ws").authorizeRequests().anyRequest().permitAll());
    }   
}

最后是 Spring boot 应用:

@SpringBootApplication
@EnableResourceServer
@EnableZuulProxy
public class ApiGatewayApplication {

    public static void main(String[] args) {
        SpringApplication.run(ApiGatewayApplication.class, args);
    }
}

事实:

  • Spring 实例化两个 ResourceServerConfiguration bean;
  • 只有更高阶的 bean 工作(/user 端点正常,/ws 端点不断询问身份验证)
  • 在spring log中,我可以看到只使用了/user ant matcher。 /ws 被完全忽略。

怎么了?

【问题讨论】:

    标签: spring-boot spring-security spring-cloud spring-security-oauth2 spring-cloud-netflix


    【解决方案1】:

    问题与我创建的 Factory 类有关。

    lambda + 匿名类的组合产生了某种问题(我无法理解),把事情搞砸了。

    在 @Configuration 类中将两个配置器都声明为 Bean 解决了这个问题。

    【讨论】:

      猜你喜欢
      • 2020-10-20
      • 2014-07-27
      • 2020-07-17
      • 2014-08-31
      • 2018-02-05
      • 2018-09-20
      • 1970-01-01
      • 1970-01-01
      • 2019-06-13
      相关资源
      最近更新 更多