我在我的应用程序中使用spring security。我希望用户在访问服务器上的任何页面之前先登录,因此我采用重定向方法。但重定向似乎是无限循环,因为无论我提交页面多少次,它都会将我重定向到登录页面。我试过调试,请求总是按照我的预期点击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" />
它默认为spring登录页面并且它可以工作,但我必须使用配置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 :(得分:0)
@sri
如您的代码中所述,我可以看到您拦截了网址"/login*"
现在任何登录结尾的网址都会被春季安全网拦截,之后你必须输入正确的凭据....
现在提供凭据后,您将被重定向到页面/login
现在很明显,我们的网址再次以登录结束,因此它被春季安全再次拦截...... 这就是为什么循环继续....
可能的解决方案
这可能适合你,
只需将以下代码放在<http pattern="/resources/**" security="none" />
标记下方,如下所示:
代码:
<http pattern="/resources/**" security="none" />
<http pattern="/Login.html" security="none" />
答案 1 :(得分:0)
确定。最后我进入了一个工作状态。以下是我对安全上下文xml
所做的更改 <intercept-url pattern="/login/**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
url正则表达式更改。此外,我的login.jsp中的操作现在是
action="/login/authenticate"
最后更新控制器请求映射路径。 希望这可以帮助任何有类似问题的人。我还没有发现这是否是实现它的正确方法,但现在仍有效。
-Sree