2013-04-10 95 views
0

我试图在身份验证失败时连同一些错误消息一起重定向回登录页面。我想知道我们如何通过某种参数/loginsecurity-context.xml说这是未经验证的,然后附上一些错误文本?Spring Security:登录身份验证控制器

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

/login实际上是返回ModelAndView的控制器。

回答

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"; 
} 
1

你也可以使用一个AuthenticationFailureHandler会产生不同的反应取决于您将收到的AuthenticationException。

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

例如,它可以将用户重定向到... /密码错误码= 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)); 
    } 
    ... 
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.... 
} 

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