如何避免自定义过滤器在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();

如果authnull 用户应该看到默认的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运行的主要内容,如果未能解决你的问题,请参考以下文章

自定义下拉搜索栏无处不在IE浏览器

如何避免 FindAll 条件默认设置为“未定义”

Big Query 过滤自定义查询创建表的空行

Vue自定义指令组件过滤器如何创建

如何在 Spring Security 中编写自定义过滤器?

如何在android中将自定义过滤器应用于相机流?