相关疑难解决方法(0)

Spring Security 3.2针对特定URL的CSRF禁用

使用Spring security 3.2在我的Spring MVC应用程序中启用CSRF.

我的spring-security.xml

<http>
 <intercept-url pattern="/**/verify"  requires-channel="https"/>
 <intercept-url pattern="/**/login*"  requires-channel="http"/>
 ...
 ...
 <csrf />
</http>
Run Code Online (Sandbox Code Playgroud)

尝试为请求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;
    }
}

}
Run Code Online (Sandbox Code Playgroud)

Csrf过滤器验证从"verify"提交的CSRF令牌,并且当我从http向https提交请求时,抛出无效令牌异常(403).如何在这种情况下禁用csrf令牌身份验证?

spring spring-mvc spring-security

26
推荐指数
4
解决办法
3万
查看次数

如何通过XML配置仅针对特定的URL模式在Spring Security 4中禁用CSRF?

如何通过XML配置仅针对特定的URL模式在Spring Security 4中禁用CSRF?

弹簧security.xml文件

<security:http auto-config="true" use-expressions="true" pattern="/ext/**">
    <csrf disabled="true" />
</security:http>

<security:http auto-config="true" use-expressions="true" authentication-manager-ref="authenticationManager">
    <security:intercept-url pattern="/auth/**" access="hasAnyRole('ROLE_USER')" />
    <security:form-login login-page="/login" authentication-success-handler-ref="loginSuccessHandler" authentication-failure-url="/login" login-processing-url="/j_spring_security_check" />
    <security:logout invalidate-session="true" logout-url="/logout" success-handler-ref="logoutSuccessHandler" />
</security:http>
Run Code Online (Sandbox Code Playgroud)

如果我只使用一个安全性:http块,我的代码工作正常,但在我添加另一个块后,它会抛出错误,如下所示:

错误

Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter gov.in.controller.filter.LoginAdtAuthFailHdlr.usernamePasswordAuthenticationFilter; nested exception is org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type [org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter] is defined: expected single matching bean but found 2: org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#0,org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter#1
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:561)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:88)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 58 more
Caused by: org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of …
Run Code Online (Sandbox Code Playgroud)

spring-mvc spring-security

5
推荐指数
2
解决办法
2万
查看次数

标签 统计

spring-mvc ×2

spring-security ×2

spring ×1