spring - 通过属性禁用 CSRF 保护

标签 spring web-applications spring-security

Spring security 通过应用 <csrf /> 提供了一种 XML 方式来配置 CSRF 保护。标记为<http>元素配置。

出于开发目的,我想偶尔关闭这种保护。通常我会编辑我的 security-context.xml文件并更改为 <csrf disabled="true"> .

我尝试使用诸如<csrf disabled="${someProperty:false}" />之类的表达式但它无效,因为 XML 架构仅接受原始 bool 值。

我不想仅针对有时必须打开/关闭的单个参数使用整个 bean 配置文件(对于整个 <http> 元素)。

有什么建议吗?

其他信息

为了使用 RESTClient 针对经过身份验证的 Controller 执行一些单元测试(当我懒得将 JUnit 与 MockMvc 一起使用时),我都需要绕过表单例份验证(例如使用 <http-basic /> 并在凭据上指示 RESTClient)并禁用 CSRF ,否则所有请求都将因缺少 token 而被阻止。

我的应用程序是一个 WAR 应用程序,根据设计,它使用 XML 配置而不是基于代码的配置

最佳答案

使用 request-matcher-ref 并创建您自己的自定义 RequestMatcher。

<csrf token-repository-ref="csrfTokenRepository" request-matcher-ref="csrfRequestMatcher" />

这是 Spring bean 的定义:

   <spring:bean class="com.faizalsidek.security.CsrfRequestMatcher" id="csrfRequestMatcher" />
        <spring:bean class="org.springframework.security.web.csrf.CookieCsrfTokenRepository" id="csrfTokenRepository" />

这是自定义的 CsrfRequestMatcher:

public class CsrfRequestMatcher implements RequestMatcher {

  /**
   * Enable CSRF flag.
   */
  @Value("${csrf.enabled}")
  private boolean csrfEnabled;

  @Override
  public final boolean matches(final HttpServletRequest request) {
    return csrfEnabled;
  }
}

关于spring - 通过属性禁用 CSRF 保护,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33275848/

相关文章:

spring - Grails 和 Spring Security : How catch user into controller?

php - 关于如何调整 Web 应用程序的性能有什么好主意吗?

node.js - 在 CPanel 上部署 Node.js React 应用程序 - 'Failed to load resource: the server responded with a status of 404 ()'

java - 行业标准 Java(Java EE、Java SE 或 Spring)应用程序源代码示例

Java 存储库 - Spring Data JPA

javascript - 如何重新堆叠页面上 div 的水平流

java - 使用 DB 和社交网站登录

grails - 登录失败后,使用参数自定义URL重定向

spring - Spring Security 中拦截 url 模式的顺序

java - Spring 批处理 : get list of defined jobs at runtime