仅使用Spring Security CSRF功能

时间:2015-01-29 07:42:06

标签: spring spring-security csrf

我只想使用Spring Security的CSRF功能而没有任何其他身份验证/授权功能,因为这些功能是由第三方提供商为我提供的。如果可以这样做,我如何告诉Spring不要查找任何带有依赖bean的身份验证管理器,只是拦截所有URL,并添加csrf令牌。

3 个答案:

答案 0 :(得分:2)

我通过进行以下更改/添加来使CSRF功能正常工作。另外,我在jsp中使用<form:form>标记来利用Spring自动插入令牌。

罐子补充道:

spring-security-acl-4.0.0.RC1.jar
spring-security-config-4.0.0.RC1.jar
spring-security-core-4.0.0.RC1.jar
spring-security-taglibs-4.0.0.RC1.jar
spring-security-web-4.0.0.RC1.jar

web.xml新增内容:

<filter>
  <filter-name>springSecurityFilterChain</filter-name>
  <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>

<filter-mapping>
  <filter-name>springSecurityFilterChain</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

添加了新的java文件:

import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class TgtWebSecurityConfigureAdapter extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().permitAll();
    }
}

Marco - 只有CSRF过滤器,它不起作用。

答案 1 :(得分:0)

你可以试试这个:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http
                .authorizeRequests()
                .anyRequest().permitAll();
    }

默认情况下启用CSRF。你可以使用(例如在百里香中):

<meta name="_csrf" value="dummy" th:value="${_csrf.token}" />

答案 2 :(得分:0)

如果您打算仅使用其CSRF保护,我个人会避免包含Spring Security Filter链。如果没有正确的配置,最终会给应用程序带来不必要的逻辑负担。

Spring Security中的CSRF保护由org.springframework.security.web.csrf.CsrfFilter servlet过滤器提供。

默认情况下,过滤器会在HttpSession上存储预期的CSRF令牌。

您可以轻松实现类似的功能,或仅尝试在servlet过滤器链/ web.xml中声明此过滤器。