2013-04-10 44 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.... 
} 

該參數有助於顯示錯誤消息。