我有一个使用以下配置运行的Web应用程序。
public class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.authorizeRequests()
.antMatchers("/api/open/**").permitAll()
.antMatchers("/api/data/**").authenticated()
.antMatchers("/api/user/**").hasRole("USER")
.antMatchers("/api/mgr/**").hasRole("MGR")
.antMatchers("/api/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and() .exceptionHandling().accessDeniedHandler(customBasicAuthenticationAccessDeniedHandler())
.and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.csrf().disable() //TODO
.httpBasic().authenticationEntryPoint(customBasicAuthenticationEntryPoint());
}
...
}
然后我补充说,
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
...
}
和
@Configuration
@EnableResourceServer
public class ResourceServerConfig extends ResourceServerConfigurerAdapter {
//Same as WebSecurityConfigurerAdapter configure()
...
}
由于ResourceServerConfig类,现在一切都已经解决了。尝试了各种方法来配置它。但似乎ResourceServerConfigurerAdapter
的行为与WebSecurityConfigurerAdapter
完全不同,但我没有一条线索可以让它发挥作用。
我是否需要删除WebSecurityConfigurerAdapter
并仅保留ResourceServerConfigurerAdapter
?是的,但是配置(HttpSecurity)的行为与我想的不同。
还建议使用一些stackoverflow答案来更改WebSecurityConfigurerAdapter
的@Order。但没有任何作用。
我首先需要知道什么是错的,什么是正确的,而不是编写代码。
如果有人指出了正确的方向,我会非常感激。
谢谢!
答案 0 :(得分:0)
通过分享这一点,我只是想提供帮助,而不是回答您的问题。我知道文档不是那么好。只需分享我的2美分。
这对我有用。使用Spring-security-Oauth2版本2.0.7
@EnableWebSecurity
public class SampleMultiHttpSecurityConfig {
@Configuration
@Order(1)
public static class ComplexOauth2SpringSecurityConfiguration extends
WebSecurityConfigurerAdapter {
@Autowired
private OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter;
@Autowired
private OAuth2AuthenticationManager oAuth2AuthenticationManager;
@Override
protected void configure(HttpSecurity http) throws Exception {
...
}
}
@Configuration
public static class ComplexOauth2SpringSecurityConfiguration2 extends
WebSecurityConfigurerAdapter {
@Autowired
private OAuth2AuthenticationProcessingFilter oAuth2AuthenticationProcessingFilter;
@Autowired
private OAuth2AuthenticationManager oAuth2AuthenticationManager;
@Override
protected void configure(HttpSecurity http) throws Exception {
...
}
}
此后,我只是添加了一个组件:扫描具有此类的包。
这主要是在服务器端。 另请注意注入OAuth2AuthenticationProcessingFilter。这基于RemoteTokenServices,其中一项工作是使用授权服务器执行令牌验证。
<bean id="remoteTokenServices" class="org.springframework.security.oauth2.provider.token.RemoteTokenServices"
init-method="init" destroy-method="shutdown">
<property name="checkTokenEndpointUrl" value"..."/>
</bean>
我确实同意我没有实现资源服务器和授权服务器。它们已经为我们建造了。但是,在测试时,我们只是创建了几个REST POST服务来模拟令牌生成和验证。