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

Spring Security CSRF支持手动安全配置

宋志学
2023-03-14

我正在处理一个复杂的手动安全配置(Spring 3.4、Spring security 3.2)。过滤器链已通过httpSessionContextIntegrationFilter和我们配置的其他bean手动配置。

<bean id="filterChainProxy" class="org.springframework.security.web.FilterChainProxy">
    <security:filter-chain-map path-type="ant" request-matcher="ant">
        <security:filter-chain pattern="/**" filters="httpSessionContextIntegrationFilter, ... beans ...,filterInvocationInterceptor"/>
    </security:filter-chain-map>
</bean>

现在,我需要添加CSRF保护。我不能添加超文本传输协议和csrf标签,因为超文本传输协议正在复制手动配置。相反,我试图在Java中配置它,但是Java配置没有添加CSRF过滤器。

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    ...
}

我声明了bean<代码>

如何在此处添加CSRF保护?我是否也需要手动插入CSRFFilter?

共有1个答案

纪勇军
2023-03-14

如果此链接回答了您的问题,请从此链接中摘录。

import my.filter.CsrfTokenGeneratorFilter;
import org.springframework.security.web.csrf.CsrfFilter;

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http.addFilterAfter(new CsrfTokenGeneratorFilter(), CsrfFilter.class);
        }

}

/**
 * Filter which adds CSRF information as response headers.
 *
 * @author Patrick Grimard
 * @since 12/31/2013 4:48 PM
 */
public final class CsrfTokenGeneratorFilter extends OncePerRequestFilter {
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
        CsrfToken token = (CsrfToken) request.getAttribute("_csrf");

        // Spring Security will allow the Token to be included in this header name
        response.setHeader("X-CSRF-HEADER", token.getHeaderName());

        // Spring Security will allow the token to be included in this parameter name
        response.setHeader("X-CSRF-PARAM", token.getParameterName());

        // this is the value of the token to be included as either a header or an HTTP parameter
        response.setHeader("X-CSRF-TOKEN", token.getToken());

        filterChain.doFilter(request, response);
    }
}
 类似资料:
  • 最后得到了一堆不一致的spring-websocket和spring-messaging构造函数调用,这些调用不编译,当然不值得在这里重复。 我意识到这有点模糊,这是因为我有点迷路!有没有人做过类似的事情,或者有一些一般性的指导可以贡献?

  • 216 网页安全色是指在不同硬件环境、不同操作系统、不同浏览器中都能够正常显示的颜色集合(调色板),也就是说这些颜色在任何终端浏览用户显示设备上的现实效果都是相同的。

  • 我正在尝试建立一个带有基本身份验证的普通Spring Boot环境。 基本上,我只想自定义用户、受保护的路径和自定义密码编码器。 Spring Boot留档状态: 要在不更改任何其他自动配置功能的情况下覆盖访问规则,请添加一个带有@Order(SecurityProperties.access_override_Order)的WebConfigurerAdapter类型的@Bean。 注意:我认为

  • 具有状态405和身份验证的页面不工作。 来自 Spring 引导日志的错误 o.s.web.servlet.不支持请求方法POST jsp页面出错: 白标错误页面 该应用程序没有针对/error的显式映射,因此您可以将它视为一个后备。 出现意外错误(类型=不允许方法,状态=405)。不支持请求方法“POST” Spring信息: -使用Spring Security 3.2.5 -使用Spring

  • 我尝试在php中实现线程,在windows上使用xampp我可以做到这一点,但是我有一个使用cpanel的linux服务器,在配置中线程安全被禁用,如何在我的服务器linux上启用?我调用phpinfo(),它显示“线程安全”已禁用

  • 我需要使用身份验证协议Kerberos,使用Camel将ActiveMQ消息路由到Kafka(Cloudera)。 活动 MQ v5.15.4 骆驼:2.21.1 Kafka客户端:1.1.0 服务器版本: 阿帕奇/2.4.6(仙人掌) Kafka安全文档声明它只支持Kerberos的SSL明文和SASL_SSL 另一方面,当我试图在Camel中使用SASL明文作为安全协议时,我在ActiveMQ