2014-01-08 216 views
0

我在我的應用程序中使用彈簧安全。我希望用戶在訪問服務器上的任何頁面之前先登錄,因此我正在採用重定向方法。但重定向似乎處於一個無限循環,因爲無論我提交頁面多少次,它都會將我重定向到登錄頁面。我試過調試,並且請求總是按照我的預期命中GET而不是POST方法。我正在使用用戶在表單上輸入的詳細信息進行LDAP身份驗證。這是安全上下文xml中的代碼。有人能指引我走向正確的方向嗎?彈簧安全重複重定向

<http pattern="/resources/**" security="none" /> 

<http auto-config="true"> 
    <intercept-url pattern="/login*" access="IS_AUTHENTICATED_ANONYMOUSLY" /> 
    <intercept-url pattern="/**" access="ROLE_USER" /> 
    <form-login login-page="/login" default-target-url="/dashboard" 
     authentication-failure-url="/loginfailed" /> 
</http> 

<authentication-manager> 
    <authentication-provider> 
     <user-service> 
      <user name="jimi" password="jimispassword" authorities="ROLE_USER, ROLE_ADMIN" /> 
      <user name="bob" password="bobspassword" authorities="ROLE_USER" /> 
     </user-service> 
    </authentication-provider> 
</authentication-manager> 

當我刪除 <form-login login-page="/login" default-target-url="/dashboard" authentication-failure-url="/loginfailed" /> 則默認爲春天的登錄頁面,它的工作原理,但我必須使用用戶證書的XML配置,而不是LDAP憑證。

編輯**

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<%@taglib uri="http://www.springframework.org/tags/form" prefix="form"%> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 
<c:set var="contextPath" value="${pageContext.request.contextPath}" /> 
<link rel="stylesheet" href="${contextPath}/resources/css/styles.css" type="text/css"> 
<h2 style="text-align:center">Login to continue to Application</h2> 
<div align="center" class="div"> 
    <form:form method="POST" modelAttribute="login" action="authenticate"> 
     <table> 
      <tr> 
       <td><form:label path="username" class="label">Username:</form:label></td> 
       <td><form:input path="username" class="input"/></td> 
       <td><form:errors path="username" class="error" /></td> 
      </tr> 
      <tr> 
       <td><form:label path="password" class="label">Password:</form:label></td> 
       <td><form:password path="password" class="input"/></td> 
       <td><form:errors path="password" class="error"/></td>    
      </tr> 
      <tr> 
       <td colspan="2" align="right"><input type="submit" 
        value="Login" class="button"/></td> 
      </tr> 
     </table> 
    </form:form> 
</div> 

感謝 SREE

+0

您能分享您的自定義登錄頁嗎? – coder

回答

0

確定。最後我達到了工作狀態。以下是我對安全上下文所做的更改xml

 <intercept-url pattern="/login/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/> 

url正則表達式更改。而且我的login.jsp中的動作現在是

action="/login/authenticate" 

最後控制器請求映射路徑被更新。 希望這可以幫助任何有類似問題的人。我還沒有發現這是否是正確的方法來實現它,但現在起作用。

-Sree

0

@sri

在你的代碼中提到,我可以看到你所截獲的URL "/login*"

現在任何與網址最後登錄時將被spring安全攔截,之後你必須輸入正確的憑證....

現在給的憑證後,你會被重定向到/login

現在它清楚地表明我們再次URL與登錄結束,因此它再次通過彈簧安全攔截... 這就是爲什麼繼續循環....

可能的解決方案

這可能會爲你工作, 只要把下面的代碼下面<http pattern="/resources/**" security="none" />標籤,如下所示:

代碼:

<http pattern="/resources/**" security="none" /> 
<http pattern="/Login.html" security="none" /> 
+0

@sri告訴我是否有問題 –

+0

登錄jsp上的POST採取不同的URL而不是/ login。無論如何,我嘗試了你的建議,但沒有奏效。 – sri