2014-01-08 139 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