我通过spring boot使用了spring security。我有两种rest服务。
public/** -->每个人都可以访问和使用这些服务
secure/** -->只有经过身份验证的用户才能使用。
@Slf4j
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity webSecurity) throws Exception {
webSecurity.ignoring().antMatchers("/public/**");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(requestHeaderAuthenticationFilter(authenticationManager()),
BasicAuthenticationFilter.class)
.authorizeRequests().antMatchers("/secure/**").fullyAuthenticated();
}
@Bean
public RequestHeaderAuthenticationFilter requestHeaderAuthenticationFilter(
final AuthenticationManager authenticationManager) {
RequestHeaderAuthenticationFilter filter = new RequestHeaderAuthenticationFilter();
filter.setAuthenticationManager(authenticationManager);
filter.setExceptionIfHeaderMissing(true);
filter.setPrincipalRequestHeader("MY_HEADER");
filter.setInvalidateSessionOnPrincipalChange(true);
filter.setCheckForPrincipalChanges(false);
filter.setContinueFilterChainOnUnsuccessfulAuthentication(false);
return filter;
}当我想访问public下的资源时,我得到了异常。
例外:"org.springframework.security.web.authentication.preauth.PreAuthenticatedCredentialsNotFoundException“
消息:“在请求中找不到MY_HEADER标头。”
为什么我的过滤器在配置为忽略资源的情况下,在公共资源下被激活?
感谢就是进步
发布于 2016-12-09 23:59:01
当使用Bean作为过滤器时,这是Spring Security Github中讨论的WebSecurity.ignoring()中的一个问题。
您可以通过删除过滤器声明中的@Bean注释来解决此问题。
// @Bean - Remove or Comment this
public RequestHeaderAuthenticationFilter requestHeaderAuthenticationFilter(
final AuthenticationManager authenticationManager) {
RequestHeaderAuthenticationFilter filter = new RequestHeaderAuthenticationFilter();
filter.setAuthenticationManager(authenticationManager);
filter.setExceptionIfHeaderMissing(true);
filter.setPrincipalRequestHeader("MY_HEADER");
filter.setInvalidateSessionOnPrincipalChange(true);
filter.setCheckForPrincipalChanges(false);
filter.setContinueFilterChainOnUnsuccessfulAuthentication(false);
return filter;
}https://stackoverflow.com/questions/33282660
复制相似问题