spring security 3 authentication-failure-url change

时间:2012-12-04 10:57:02

标签: spring spring-security

我正在开发使用Spring Security 3和LDAP进行身份验证的Spring应用程序。

这是我的代码中的表单登录片段:

<security:form-login
    authentication-failure-url="/index.xhtml?error=true"
    default-target-url="/SomeDefaultUrl.xhtml"
    login-page="/index.xhtml" />

当身份验证失败时,我的应用程序将重定向到“/index.xhtml?error=true”url。问题是我不知道如何捕获“错误”变量并在index.xhtml文件中显示一些身份验证失败消息。我没有使用Spring mvc。

第二个问题是更改authentication-failure-url不起作用。

<security:form-login
    authentication-failure-url="/error.xhtml"
    default-target-url="/SomeDefaultUrl.xhtml"
    login-page="/index.xhtml" />

我更改了authentication-failure-url,但是尽管有这个改变,它仍然重定向到index.xhtml文件而没有任何变量。

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

如果你的index.xhtml是一个JSP,你可以这样做(直接来自Spring 3 Recipes一书):

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:if test="${not empty param.error}">
    Login error.
    Reason ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
</c:if>

答案 1 :(得分:1)

重要提示:/index.xhtml?error=trueerror作为GET参数发送。

如果您的index.xhtml是JSP文件,则可以使用隐式request引用访问该参数:

<%= request.getParameter("error") %>

如果index.xhtml是您的Web控制器方法/ servlet的URL,则需要从error对象获取Request param。

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException 
{       
    String error = req.getParameter("error");
}

最后,如果您的index.xhtml是一个普通的html文件,您可以使用Java Script获取该参数: How to retrieve GET parameters from javascript?

关于第二个问题:确保正确重建项目。看起来它没有注意到你的变化。

答案 2 :(得分:0)

<security:form-login
    authentication-failure-url="/error.xhtml"
    default-target-url="/SomeDefaultUrl.xhtml"
    login-page="/index.xhtml" />

“我更改了authentication-failure-url,但是尽管有这个更改,它仍然会重定向到index.xhtml文件而没有任何变量。”

答案:请在<http auto-config="true" use-expressions="true"></http>正文中定义以下拦截网址。

<intercept-url pattern="/error.xhtml" access="permitAll"/>

您可能没有定义 /error.xhtml 的访问权限,这就是为什么 authentication-failure-url 值不可接受并且正在进入下一个逻辑URL的原因定义即 /index.html

答案 3 :(得分:0)

这里没有任何解决方案适用于我,然后我找到了这个问题,它为我提供了正确的解决方案: spring security 3.1. custom authentication-failure-url with url parameters