gpt4 book ai didi

spring-mvc - Spring 安全 webSecurity.ignoring()

转载 作者:行者123 更新时间:2023-12-03 14:45:26 27 4
gpt4 key购买 nike

我通过spring boot使用spring security。
我有两种休息服务。

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 header 。”

为什么我的过滤器在配置为忽略资源时在公共(public)资源下激活?

谢谢是提前

最佳答案

这是 WebSecurity.ignoring() 中的一个问题如 Spring Security Github 中所述当使用 Beans 作为过滤器时。

您可以通过删除 @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;
}

关于spring-mvc - Spring 安全 webSecurity.ignoring(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33282660/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com