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

Spring Security 3.2对特定URL禁用CSRF

邢良才
2023-03-14
<http>
 <intercept-url pattern="/**/verify"  requires-channel="https"/>
 <intercept-url pattern="/**/login*"  requires-channel="http"/>
 ...
 ...
 <csrf />
</http>
@Configuration
@EnableWebSecurity
public class MySecurityConfig extends WebSecurityConfigurerAdapter {

private CsrfMatcher csrfRequestMatcher = new CsrfMatcher();

@Override
public void configure(HttpSecurity http) throws Exception {

    http.csrf().requireCsrfProtectionMatcher(csrfRequestMatcher);

}

class CsrfMatcher implements RequestMatcher {
    @Override
    public boolean matches(HttpServletRequest request) {

        if (request.getRequestURL().indexOf("verify") != -1)
            return false;
        else if (request.getRequestURL().indexOf("homePage") != -1)         
            return false;

        return true;
    }
}

}

Csrf筛选器验证从“验证”提交的Csrf令牌,当我从HTTP向https提交请求时,抛出无效令牌异常(403)。如何在这种情况下禁用csrf令牌身份验证?

共有1个答案

田硕
2023-03-14

我知道这不是一个直接的答案,但人们(就像我一样)在搜索这类问题时通常不会指定Spring的版本。因此,由于spring security存在一种可以忽略某些路由的方法:

以下内容将确保忽略CSRF保护:

  1. 任何GET、HEAD、TRACE、OPTIONS(这是默认值)
  2. 我们还显式声明忽略任何以“/sockjs/”开头的请求
     http
         .csrf()
             .ignoringAntMatchers("/sockjs/**")
             .and()
         ...
 类似资料:
  • 我的控制器是 我对Spring完全陌生,请帮帮我怎么做?

  • 由于我有,我的应用程序将提示所有URL的证书,那么对于一些特定的URL(如或)我是否可以绕过URL?

  • 问题内容: 我正在使用无状态Spring Security,但是如果要注册,我想禁用Spring Security。我禁用了 但它不起作用,我在下面收到错误消息: 我认为这意味着弹簧安全过滤器正在工作 我的网址顺序始终为“ / api / v1” 我的spring配置是 我的身份验证过滤器是 我的控制器是 我怎么做? 问题答案: 使用它意味着每个经过身份验证的用户,但是你禁用了匿名访问,因此将无法

  • 问题内容: 最近,存在一个问题,即如何在特定终端的Python Flask中禁用日志记录(跳过一个终端的Flask日志记录?)。 例如,这对于您不希望使日志混乱的情况是有道理的。 我为Flask解决了这个问题,但是当使用Gunicorn运行Flask时,我的解决方案不再起作用。 如何使用Gunicorn实现此目的?我想要常规的日志记录行为,但是没有端点的任何日志。 问题答案: 我想通了-您需要重写

  • 问题内容: 我正在使用.ajaxStart()和.ajaxStop()在提出ajax请求时显示模式。(在开始和停止之间) 现在,我想添加一个longpoll函数,该函数一直等待通知,类似于本网站左上角的通知。 我的问题现在在于仅针对longpolling请求禁用此模式。 在处理程序上注册“加载屏幕”: 我的longpoll函数: 我试过了: ..并在开始轮询后重新连接处理程序,但没有任何乐趣。 我

  • 我将Spring security用于包含一组Restful服务的Spring启动应用程序。我已经通过基本身份验证启用了网络安全。我希望启用基本的身份验证,除了以特定模式结尾的特定API URL。(例如,healthcheck API,如:/application/_healthcheck) 代码如下所示: 然而,每当我调用/应用程序/_HealthCheckURL,浏览器总是提示我输入凭据。 或