在我的Spring MVC应用程序中使用Spring security 3.2启用了CSRF。
我的spring-security.xml
<http>
<intercept-url pattern="/**/verify" requires-channel="https"/>
<intercept-url pattern="/**/login*" requires-channel="http"/>
...
...
<csrf />
</http>
字符串
正在尝试为请求URL中包含“verify”的请求禁用CSRF。
MySecurityConfig.java
@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过滤器验证从“verify”提交的CSRF令牌,当我从http向https提交请求时,抛出无效令牌异常(403)。在这种情况下,我如何禁用CSRF令牌身份验证?
7条答案
按热度按时间ttp71kqs1#
我知道这不是一个直接的答案,但人们(像我一样)在搜索这类问题时通常不会指定spring的版本。所以,由于spring security存在一个方法,让我们忽略一些路由:
以下内容将确保CSRF保护忽略:
1.任何GET、HEAD、TRACE、OPTIONS(这是默认值)
1.我们还显式声明忽略任何以“/sockjs/”开头的请求
字符串
nnsrf1az2#
我希望我的回答可以帮助别人。我发现这个问题搜索 * 如何禁用CSFR的具体网址在Spring Boot *。
我使用了这里描述的解决方案:http://blog.netgloo.com/2014/09/28/spring-boot-enable-the-csrf-check-selectively-only-for-some-requests/
这是Spring Security配置,允许我在某些URL上禁用CSFR控件:
字符串
它与Sping Boot 1.2.2(和Spring Security 3.2.6)一起工作。
bq8i3lrv3#
我使用的是Spring Security v4.1。经过大量的阅读和测试,我使用XML配置禁用了特定URL的CSRF安全功能。
字符串
通过上述配置,我为POST启用了CSRF安全性only| 放|拒绝所有以
/rest/
开头的URL的请求。ctrmrzij4#
explanate对特定的url模式禁用,对某些url模式启用。
字符串
qni6mghb5#
字符串
平均值
型
标签:https://docs.spring.io/spring-security/site/docs/4.1.x/reference/htmlsingle/
polkgigr6#
对于Spring Security 6,应该使用接受
Customizer
参数的csrf
方法。示例配置:
字符串
xsuvu9jc7#
Use security=“none”. for e.g. in spring-security-soft.xml
字符串