当前位置: 首页 > 知识库问答 >
问题:

Spring安全-使用特定匹配器创建2个过滤器链

郦兴德
2023-03-14

我正在对现有的spring项目实施ADFS支持。因为我们已经有了自己的JWT身份验证,我们希望与ADFS身份验证并行工作,所以我想实现一个新的过滤器链,它将只处理特定的API请求路径。我的意思是我想创建:

  • 将处理所有/ADFS/saml/**API调用的ADFS筛选器链

我正在使用ADFS Spring Security lib,它像这样定义过滤器链:

public abstract class SAMLWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {

//some code

 protected final HttpSecurity samlizedConfig(final HttpSecurity http) throws Exception {
        http.httpBasic().authenticationEntryPoint(samlEntryPoint())
                .and()
                .csrf().ignoringAntMatchers("/saml/**")
                .and()
                .authorizeRequests().antMatchers("/saml/**").permitAll()
                .and()
                .addFilterBefore(metadataGeneratorFilter(), ChannelProcessingFilter.class)
                .addFilterAfter(filterChainProxy(), BasicAuthenticationFilter.class);

        // store CSRF token in cookie
        if (samlConfigBean().getStoreCsrfTokenInCookie()) {
            http.csrf()
                    .csrfTokenRepository(csrfTokenRepository())
                    .and()
                    .addFilterAfter(new CsrfHeaderFilter(), CsrfFilter.class);
        }

        return http;
    }
}

我扩展了这个类:

@EnableWebSecurity
@Configuration
@Order(15)
@RequiredArgsConstructor
public class ADFSSecurityConfiguration extends SAMLWebSecurityConfigurerAdapter {
   @Override
    protected void configure(final HttpSecurity http) throws Exception {
        samlizedConfig(http)
                .authorizeRequests()
                .antMatchers("/adfs")
                .authenticated();
    }

}

但在调试时,我看到这个新的过滤器链被设置为匹配“any”请求。所以我可能把匹配器设置错了。

共有1个答案

鄢承运
2023-03-14

事实上,在阅读了官方文档后,答案很简单:(请参阅“创建和定制过滤链”一节)

    @Override
    protected void configure(final HttpSecurity http) throws Exception {
        samlizedConfig(http)
                .antMatcher("/adfs/**");
    }

它不应放在<代码>之后。authorizeRequests()但在第一个匹配器上出现问题。

 类似资料:
  • 我正在使用这个环境: Spring 4.0.5 Spring security 3.2.4 在我的环境中,我有一个SSO系统,我需要在这个系统中集成我的web应用程序。这个系统是私人产品。SSO机制的最终结果是在请求头中放置一个参数。所以我在申请中应该做的是: null 此场景类似于CAS集成场景;所以我从CAS集成着手;我写了我的自定义过滤器,我写了我的自定义入口点和处理请求所需的所有其他类,但

  • 问题内容: 我需要按类别过滤项目列表。我希望用户能够单击一个按钮,然后将过滤器应用于列表。 目前,我已经在一定程度上进行了这项工作。 举例来说,我有一个电影列表,如下所示: 我还有一个电影流派列表(渲染为按钮,单击该按钮将过滤电影列表),如下所示: (“ changeGenre()”函数所做的全部工作就是更新范围,以显示当前正在查看的流派)。 现在这个方法可以正常工作,直到我遇到两种类型的情况:“

  • 我已将过滤器配置如下,但在Spring Security Filter链之前不会调用它。我已将顺序设置为零 我使用的是Spring Boot 1.3,它支持在过滤器上设置顺序

  • 我在ES中有一个多匹配查询,希望添加一个过滤器。 添加此筛选器的语法是什么? 我试过:

  • 还有,如果真的要给出另一个模式,“/restful/**”不是更好吗?因为“/**”将匹配与“/RESTFUL/**”不匹配的URL,因此不由此筛选器链处理。

  • 问题内容: 我正在尝试找出使用TypeScript创建自定义角度过滤器的最佳方法。 我看到的所有代码示例都使用类似以下内容的代码: …可以,但是由于我想将所有过滤器代码分开而显得有些混乱。所以我想知道如何将过滤器声明为一个单独的文件(例如,filters / reverse- filter.ts),这样我就可以创建它: …以与控制器,服务等相同的方式 TS和Angular的文档在地面上似乎很薄,尤