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

选择性使用Spring Security的CSRF过滤器

邢灿
2023-03-14

免责声明:我的问题有点类似于这个问题和这个问题,但我已经尝试了这些帖子中建议的所有答案,并且已经花了几天时间来解决这个问题。

我在我现有的应用程序(JSP,仅限Servlet)中引入了Spring Security 3.2.6,并且我正在使用Java配置。我的应用程序将被浏览器和非浏览器客户端使用。我希望所有浏览器对网址的请求(即<代码>/网页/webVersion/和<代码>/网页/webVersion2/)都启用CSRF,所有其他请求都禁用CSRF。非浏览器客户端永远不会访问以上两个网址,而浏览器应用程序也可以访问CSRF禁用的网址。

我尝试了多种选择:

>

  • 仅在上述URL上启用Spring Security性:

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            .antMatchers("/","/resources/****").permitAll()
            .antMatchers("/webpages/webVersion/****", "/webpages/webVersion2/****").authenticated()
            .antMatchers("/webpages/****").permitAll()
            .anyRequest().anonymous()
            .and()
            .formLogin().loginPage("/webpages/webVersion/login/newLogin.jsp").failureUrl("/webpages/webVersion/login/newLogin.jsp?error=true").loginProcessingUrl("/j_spring_security_check")
            .usernameParameter("username").passwordParameter("password").defaultSuccessUrl("/webpages/webVersion/login/loginSuccess.jsp", true).permitAll()
            .and()
            .logout().logoutUrl("/webpages/webVersion/logout.jsp").permitAll()
            .and().exceptionHandling().accessDeniedPage("/webpages/webVersion/404-error-page.jsp")
            .and()
            .csrf();
    } 
    

    这不起作用,因为我观察到所有URL都启用了CSRF。

    尝试使用CSRFprotected Matcher

    .csrf().requireCsrfProtectionMatcher(csrfRequestMatcher); 
    

    CSRF仅对预期的URL启用,但即使是/resources/**/webpages/**URL也需要在匹配功能中进行检查。考虑到它将适用于所有请求,似乎有点过分。

    已尝试使用另一个版本的configure方法:

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().regexMatchers(".*?/jsp/(?!webVersion|webVersion2).*?");
    }
    

    我不确定我做得是否正确,但这并没有产生我想要的结果。

    上述哪种方法是正确的(Spring Security)方式来执行我想要的操作?如何从我的Spring Security配置中实现所需的行为?

  • 共有1个答案

    宦砚
    2023-03-14

    事实证明,他们是我的配置中的一些错误,最后我使用方法3实现了目标...我使用了下面版本的配置函数以及通常的配置(HttpSecurity超文本传输协议)函数...

    @Override
    public void configure(WebSecurity web) throws Exception {
      web.ignoring().regexMatchers(".*?/jsp/(?!webVersion|webVersion2).*?");
    }
    
     类似资料:
    • 本文向大家介绍jQuery过滤选择器经典应用,包括了jQuery过滤选择器经典应用的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了经典的jQuery过滤选择器应用,供大家参考,具体内容如下 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

    • 我觉得我已经读了很多例子/文档,看了很多视频,但是我不能用带反冲的选择器。也许我只是今天过得不好,因为我觉得没那么难。 这就是我所处的位置。。。 假设我有这样的数据: 在我的索引中,我有: DataComponent类似于: 我希望这样,如果用户选择它只显示带有cat的数据,但如果未选择任何内容,也会显示所有数据。。。

    • 问题内容: 我正在尝试根据子属性的值来过滤jmespath中对象的属性,并且只想包括那些将子属性设置为特定值的属性。 根据此示例数据: 我想要一个具有启用该功能的所有属性的对象。 我想我可以使用此jmespath查询来过滤设置为true 的对象。不幸的是,它似乎不起作用,而是返回一个空数组。 或只返回布尔值而没有任何上下文。 即使true 可行,也只是属性值的数组,但我也需要键(和)。有什么办法可

    • 问题内容: 每当我在应用程序中搜索时,都会显示正确的结果,但是当我点击搜索的单元格时,在执行搜索之前,它始终会播放表格的第一个索引。我试图在我的didselectcell中使用isSearching Bool,但似乎无法正常工作。 问题答案: 我认为问题在于您正在跟踪自己是否在搜索和操作源数据数组。 我有一个示例游乐场代码段,我已将其用于其他一些答案,该示例向您展示了如何更有效地执行此操作,并提供

    • 我有三张桌子表1、表2和表3。 表1与表2有一对多的关系。表2与表3有一对多的关系。 假设表1已经 我希望连接这三个表,以便只返回表3中t2key的第一个唯一匹配 join的结果应该是 目前,我的应用程序连接了所有三个表,返回所有可能的行。我需要用上述条件过滤掉这个。

    • 问题内容: 我正在使用创建一个解决方案,而选择应该只包含另一个中不包含的选项。防爆 要通过另一个值进行过滤,我该怎么办? 问题答案: 劳拉(Laura)的上述答案在编写自定义filterOption函数时中断了过滤(如果您不希望Select可过滤,那么可能就可以了)。 一个更简单的解决方案是,对通过的应用仅应用一个简单的过滤器,而不是对第二个“选择”应用。 工作实例