0

当身份验证失败以及一些错误消息时,我正在尝试重定向回登录页面。我想知道我们如何将某种参数传递给/loginsecurity-context.xml这是未经身份验证的,然后附加一些错误文本?

<security:form-login login-page="/login"
                     username-parameter="email"
                     password-parameter="password"
                     default-target-url="/member/"
                     authentication-failure-url="/login"/>

/login实际上是一个返回ModelAndView的Controller。

4

3 回答 3

4

尝试简单地将查询参数附加到authentication-failure-url这样的:

<security:form-login login-page="/login"
                     username-parameter="email"
                     password-parameter="password"
                     default-target-url="/member/"
                     authentication-failure-url="/login?error=true" />

然后,您的登录处理程序方法可以接收该可选查询参数,并相应地操作响应。这些方面的东西:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String getLoginPage(
        @RequestParam(required = false) boolean error,
        ModelMap model) {

    model.put("error", error ? "You have entered an invalid username or password!" : "");

    return "loginpage";
}
于 2013-04-10T18:44:26.373 回答
1

您还可以使用 AuthenticationFailureHandler,它会根据您将收到的 AuthenticationException 做出不同的反应。

<security:form-login login-page="/login"
    username-parameter="email"
    password-parameter="password"
    default-target-url="/member/" 
    authentication-failure-handler-ref="myAuthenticationFailudeHandler"/>

例如,它可以将用户重定向到 .../login?errorCode=errorCode1

然后您可以修改控制器以响应不同的错误代码:

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String getLoginPage(
        ..., 
        @RequestParam(value="errorCode", required = false) String errorCode, 
        Model model, 
        ... ) {
    if (errorCode != null) {
        model.put("error", translateErrorCode(errorCode));
    }
    ...
于 2013-04-11T13:17:54.257 回答
1

我通常这样做

<security:form-login login-page="/" authentication-failure-url="/myapp/auth/login?error=true" default-target-url="/myapp/main/default"/>

和控制器:

@RequestMapping(value = "/auth/login", method = RequestMethod.GET)
public ModelAndView indexp(@RequestParam(value = "error", required = false) boolean error, ModelMap model, Principal principal) {
ModelAndView mv = new ModelAndView("view");
// return your view....
}

该参数有助于显示错误消息。

于 2013-04-13T06:14:32.210 回答