我一直在使用Spring Security 3.0爲我們的網站登錄機制使用專用的登錄網頁。現在我需要該登錄網頁來代替我們網站中每個網頁上的燈箱/彈出窗口,在登錄時我會得到一個AJAX結果,無論它是否成功。 Spring Security和Spring webmvc 3.0的最佳做法是什麼?ajax登錄彈簧webMVC和彈簧安全
16
A
回答
13
在客戶端,您可以通過ajax模擬正常的表單提交到您的登錄網址。舉例來說,在jQuery的:
$.ajax({
url: "${pageContext.request.contextPath}/j_spring_security_check",
type: "POST",
data: $("#loginFormName").serialize(),
beforeSend: function (xhr) {
xhr.setRequestHeader("X-Ajax-call", "true");
},
success: function(result) {
if (result == "ok") {
...
} else if (result == "error") {
...
}
}
});
在服務器端,您可以自定義AuthenticationSuccessHandler
和AuthenticationFailureHandler
返回一個值,而不是重定向的。因爲你可能需要一個正常的登錄頁面,以及(對於試圖通過直接的URL訪問受保護的頁面),你應該告訴從正常呼叫AJAX調用,例如,使用標題:
public class AjaxAuthenticationSuccessHandler implements AuthenticationSuccessHandler {
private AuthenticationSuccessHandler defaultHandler;
public AjaxAuthenticationSuccessHandler() {
}
public AjaxAuthenticationSuccessHandler(AuthenticationSuccessHandler defaultHandler) {
this.defaultHandler = defaultHandler;
}
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication auth)
throws IOException, ServletException {
if ("true".equals(request.getHeader("X-Ajax-call"))) {
response.getWriter().print("ok");
response.getWriter().flush();
} else {
defaultHandler.onAuthenticationSuccess(request, response, auth);
}
}
}
7
我沒有類似的東西(感謝axtavt):
public class AjaxAuthenticationSuccessHandler extends
SimpleUrlAuthenticationSuccessHandler {
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication auth)
throws IOException, ServletException {
if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
response.getWriter().print(
"{success:true, targetUrl : \'"
+ this.getTargetUrlParameter() + "\'}");
response.getWriter().flush();
} else {
super.onAuthenticationSuccess(request, response, auth);
}
}}
我選擇了延長簡單的成功處理程序上的非Ajax請求的默認行爲。這是XML使它的工作:
<http auto-config="false" use-expressions="true" entry-point-ref="authenticationProcessingFilterEntryPoint">
<custom-filter position="FORM_LOGIN_FILTER" ref="authenticationFilter" />
...
...
</http>
<beans:bean id="authenticationProcessingFilterEntryPoint"
class="org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint">
<beans:property name="loginFormUrl" value="/index.do" />
<beans:property name="forceHttps" value="false" />
</beans:bean>
<beans:bean id="authenticationFilter" class=
"org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter">
<beans:property name="authenticationManager" ref="authenticationManager"/>
<beans:property name="filterProcessesUrl" value="/j_spring_security_check"/>
<beans:property name="sessionAuthenticationStrategy" ref="sas" />
<beans:property name="authenticationFailureHandler" ref="failureHandler"/>
<beans:property name="authenticationSuccessHandler" ref="successHandler"/>
</beans:bean>
<beans:bean id="successHandler" class="foo.AjaxAuthenticationSuccessHandler">
<beans:property name="defaultTargetUrl" value="/login.html"/>
</beans:bean>
<beans:bean id="failureHandler" class="foo.AjaxAuthenticationFailureHandler" />
相關問題
- 1. 彈簧安全2.0.7和彈簧2.5的登錄表單問題
- 2. 彈簧安全打開彈出登錄
- 3. 休眠和mysql登錄彈簧安全
- 4. 彈簧安全2.0彈簧安全3.0
- 5. Angular2與彈簧靴和彈簧安全
- 6. 彈簧啓動和彈簧安全4.0
- 7. 彈簧mvc +彈簧安全,404登錄後
- 8. 彈簧安全
- 9. 在彈簧安全與彈簧websocket集成彈簧安全性和
- 10. 彈簧安全錯誤登錄用戶
- 11. 無法使用彈簧安全登錄
- 12. 用亞馬遜登錄彈簧安全
- 13. 彈簧安全單點登錄
- 14. 無法使用彈簧安全登錄
- 15. 鏈接使用彈簧安全登錄
- 16. 彈簧安全自動登錄
- 17. 角度2登錄與彈簧安全
- 18. 顯示登錄用戶彈簧安全
- 19. 使用彈簧安全與彈簧批
- 20. 彈簧啓動彈簧安全
- 21. Neo4j彈簧安全
- 22. 彈簧安全表
- 23. Grails和Oauth2彈簧安全
- 24. 彈簧安全和Struts 2
- 25. 彈簧安全ACL和Postgres
- 26. Keycloak和彈簧安全
- 27. 彈簧安全和VAADIN
- 28. 如何使用彈簧引導和彈簧安全性配置彈簧4.0 openId
- 29. 彈簧安全使用AJAX登錄時顯示403錯誤
- 30. 更改彈簧和彈簧安全的servlet映射
我沒有得到這個工作。用戶名和密碼從要求中刪除 – gsagrawal 2012-11-23 13:35:26