【发布时间】: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