spring security 在使用 AJAX 登录时显示 403 错误

Posted

技术标签:

【中文标题】spring security 在使用 AJAX 登录时显示 403 错误【英文标题】:spring security showing 403 error while logging in using AJAX 【发布时间】:2015-08-15 22:05:51 【问题描述】:

我知道已经有很多与此错误相关的问题,但我几乎尝试了所有方法,但没有解决我的问题。

当我在浏览器控制台中提交表单时,我看到了

Failed to load resource: the server responded with a status of 403 (Forbidden)

我的项目在 Spring 4.0.3、spring security 4.0.1、java 8 并在 wildfly 8.x 服务器上运行

我的ajax调用是

 $.ajax(
           url: "j_spring_security_check",    
           data: $('#loginForm').serialize(), 
           type: "POST",
           beforeSend: function (xhr) 
              xhr.setRequestHeader("X-Ajax-call", "true");
           ,
           success: function(result)        
                if (result == "not-ok") 
                  $('.error').show();
                  $('.login-error').html(CREDENTIAL_CHECK) ;
                  return false;
                 else 
                    $('.error').hide();
                    document.location = result;
                
           ,
            error: function(XMLHttpRequest, textStatus, errorThrown)
                $('.error').show();
                $('.login-error').html(NETWORK_CHECK) ;
                return false; 
            
        );

我的安全配置:

<security:form-login    login-page="/home" 
                        default-target-url="/home"
                        authentication-failure-handler-ref="myAuthenticationFailureHandler" 
                        authentication-success-handler-ref="myAuthenticationSuccessHandler"
/>
<security:logout logout-success-url="/logout" 
                 invalidate-session="true" 
                 delete-cookies="SPRING_SECURITY_REMEMBER_ME_COOKIE" 
/>

我试着设置

<security:headers disabled="true" />

<security:csrf disabled="true" />

它不工作。在服务器控制台中,我没有看到任何错误。

我还能做些什么来修复这个错误?我已经在这个问题上浪费了 2 天时间

【问题讨论】:

网址是login 而不是j_spring_security_check 你怎么说? 检查控制器中的 ajax url 是否存在。并确保您的 RequestMethod.POST 在您的控制器中。 登录 url 在 spring security 4 中更改以匹配 java config 中使用的那个。 为此它也显示403错误..我认为..问题是别的..我正在使用wildfly8 【参考方案1】:

该问题创建 CSFR 保护,因为在 Spring Security 4.x 中默认启用并且所有 GET 和 POST 请求都有令牌,当您不创建此令牌服务器时会显示 403 错误。您可以轻松禁用此安全性 这里有 xml conf http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-xml.html 和 java conf http://docs.spring.io/spring-security/site/migrate/current/3-to-4/html5/migrate-3-to-4-jc.html

【讨论】:

以上是关于spring security 在使用 AJAX 登录时显示 403 错误的主要内容,如果未能解决你的问题,请参考以下文章

spring security 在使用 AJAX 登录时显示 403 错误

ajax请求在spring security中被拒绝,Grails

用于ajax调用的spring security csrf保护

Spring Security Ajax 被拦截

AJAX / Spring MVC - 没有 Spring Security 的 403 禁止错误

Spring Security Ajax 登录在以下请求中成功验证 null