2012-12-04 70 views
4

我正在Spring上开发Web应用程序,使用Spring Security 3和LDAP进行身份验证。spring security 3 authentication-failure-url change

这是我的代码的形式登录片段:

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

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

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

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

我改变了认证失败的URL,但尽管这样的改变,它仍然重定向到的index.xhtml文件,而无需任何变量。

我怎样才能解决这个问题?

回答

1

重要:/index.xhtml?error=true发送errorGET参数。

如果您index.xhtml是一个JSP文件,您可以使用隐式request参考访问PARAM:

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

如果index.xhtml是你的网络控制器方法/ servlet的网址,你需要从Request对象获取error PARAM。

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

最后,如果你index.xhtml是一个普通的HTML文件,你可以使用Java脚本来获取参数: How to retrieve GET parameters from javascript?

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

+0

谢谢你的伟大的建议。 关于第二个问题:我重建项目,它注意到我的变化,因为它被重定向到'index.xhtml'文件而不是'index.xhtml?error = true' 我认为当authentication-failure-url参数的值不是_acceptable_它会自动重定向到index.xhtml。但我不知道如何解决它 – mariami

3

如果您index.xhtml是JSP,你可以做到这一点(直接从春季3食谱书):

<%@ 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> 
0
<security:form-login 
    authentication-failure-url="/error.xhtml" 
    default-target-url="/SomeDefaultUrl.xhtml" 
    login-page="/index.xhtml" /> 

“我改变了认证失败的URL,但尽管这样的变化,它仍然没有任何变量重定向到index.xhtml文件。“

答案:请在您的<http auto-config="true" use-expressions="true"></http>正文中定义下面的拦截url。

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

您可能没有定义访问/error.xhtml,这就是为什么认证失败-URL值是不能接受的,并且通过所定义即/索引的下一个逻辑URL落下。HTML