如何避免自定义过滤器在spring-security中为不安全的url运行
Posted
技术标签:
【中文标题】如何避免自定义过滤器在spring-security中为不安全的url运行【英文标题】:How to avoid custome filter to run for non-secured urls in spring-security 【发布时间】:2015-07-29 01:13:37 【问题描述】:我正在构建一个基于 REST 的 Web 应用程序,并且我已成功为其应用了 Spring Security,但我担心我添加了一个自定义过滤器
http
.authorizeRequests()
.antMatchers("/mypro/userCont/signup").permitAll()
.and()
.addFilterBefore(new CustomFilter(), UsernamePasswordAuthenticationFilter.class)
.httpBasic();
我希望这个过滤器应该只为安全的 url 运行,而不是为不安全的 url,如果它为非安全的 url 运行,那么它不应该中断我在非安全的 url 上获取资源。
我的场景是,如果用户未登录,则应运行安全 url 自定义过滤器,使用以下代码检查 Principal
:
Authentication auth = (Authentication) SecurityContextHolder.getContext().getAuthentication();
如果auth
是null
用户应该看到默认的spring security login 弹出窗口
如果我点击非安全网址,我应该访问资源。
谁能帮帮我。
【问题讨论】:
【参考方案1】:您可以通过配置WebSecurity
完全跳过特定资源的安全性。在这种情况下,Spring 安全将完全忽略该 URL 模式:
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
@Override
public void configure(WebSecurity webSecurity) throws Exception
webSecurity
.ignoring()
.antMatchers("/resources/**"); //skip security entirely
@Override
public void configure(HttpSecurity http) throws Exception
http
.addFilter(mycustomFilter)
.authorizeRequests().anyRequest()
.and()
.httpBasic();
或者,您可以简单地使用permitAll()
方法来排除您需要允许匿名访问的那些。
@Configuration
@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter
@Override
public void configure(HttpSecurity http) throws Exception
http
.addFilter(mycustomFilter)
.authorizeRequests()
.antMatchers("/not-secured/**").permitAll()
.and()
.httpBasic();
【讨论】:
以上是关于如何避免自定义过滤器在spring-security中为不安全的url运行的主要内容,如果未能解决你的问题,请参考以下文章