首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >spring安全webSecurity.ignoring()

spring安全webSecurity.ignoring()
EN

Stack Overflow用户
提问于 2015-10-22 21:49:32
回答 1查看 2.9K关注 0票数 6

我通过spring boot使用了spring security。我有两种rest服务。

public/** -->每个人都可以访问和使用这些服务

secure/** -->只有经过身份验证的用户才能使用。

代码语言:javascript
复制
@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标头。”

为什么我的过滤器在配置为忽略资源的情况下,在公共资源下被激活?

感谢就是进步

EN

回答 1

Stack Overflow用户

发布于 2016-12-09 23:59:01

当使用Bean作为过滤器时,这是Spring Security Github中讨论的WebSecurity.ignoring()中的一个问题。

您可以通过删除过滤器声明中的@Bean注释来解决此问题。

代码语言:javascript
复制
// @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;
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33282660

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档