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