【发布时间】:2021-04-02 21:01:20
【问题描述】:
我们正面临 SpringSecurity 忽略方法的问题。我们尝试跳过一些 url(执行器/健康)和资源的身份验证。身份验证在外部进行,我们有一个自定义过滤器来提取授权原则。
我们重写配置的方法如下所示:
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/resources/**", "/actuator/health");
}
protected void configure(HttpSecurity http) throws Exception {
http.addFilter(cutstomFilter).authorizeRequests()
.antMatchers("/add","/update","/upload").hasAuthority("ADMIN").anyRequest().authenticated()
.and().logout().logoutSuccessUrl("/logoutUser").and()
.exceptionHandling().accessDeniedPage("/accessDenied").and().csrf().disable();
}
通过给定的实现,我们的 customFilter 被调用资源和健康 url。由于原理更改,这导致重新验证。
我们尝试添加此代码,但 customFilter 也被调用以获取健康 url。
http.authorizeRequests().antMatchers("/actuator/health").permitAll()
注意:检查了@Rob Winch 的答案,但不明白如果我们将这些 url 放在忽略列表中,为什么我们需要自定义文件管理器。 https://stackoverflow.com/a/19985323/2138633
【问题讨论】:
-
显示您的过滤器类别。可能是stackoverflow.com/questions/39314176/…的重复
-
为了清楚起见,您的第一个安全配置是正确的。您的问题是您的过滤器不仅用作安全链过滤器,还用作 servlet 过滤器。如果您公开过滤器,Spring Boot 会自动执行此操作。
-
@dur:谢谢,我学到了一些关于安全配置中过滤器的新知识。 BR
-
在 Spring Boot 中添加自定义安全过滤器的代码示例:stackoverflow.com/questions/24364436(为应用程序中的每个自定义安全过滤器添加一个 FilterRegistrationBean)。添加注释的请求正在等待处理以使其更容易,请参阅github.com/spring-projects/spring-boot/issues/16500。
标签: java spring-boot spring-security spring-boot-actuator