我使用這個鏈接教程:春季安全自定義錯誤消息沒有顯示
http://www.mkyong.com/spring-security/display-custom-error-message-in-spring-security/
要顯示的登錄表單自定義錯誤消息,我得到了它的開始。但聲明認證失敗處理程序-REF =「myAuthErrorHandler」自定義故障處理程序認證後,我看不出它的登錄表單的自定義消息:
我在做什麼錯誤?任何人都可以解釋我發生了什麼,爲什麼'無效的用戶名或密碼'不顯示?
下面的代碼:
AuthentificationListener
public class AuthentificationListener implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response, AuthenticationException ae)
throws IOException, ServletException {
UsernamePasswordAuthenticationToken user = (UsernamePasswordAuthenticationToken) ae
.getAuthentication();
/* User */
response.sendRedirect(request.getContextPath()
+ "/abc/main/loginfailed");
}
}
的applicationContext.xml:
<bean id="myAuthErrorHandler" class="org.abc.handler.AuthentificationListener"/>
春季安全:
<http auto-config="true">
<intercept-url pattern="/abc/main/welcome*" access="ROLE_USER" />
<intercept-url pattern="/abc/main/record/**" access="ROLE_USER" />
<form-login
login-page="/abc/main/login"
authentication-failure-handler-ref="myAuthErrorHandler"
default-target-url="/abc/main/welcome"
/>
<logout logout-success-url="/abc/main/logout" />
</http>
的login.jsp:
<c:if test="${not empty error}">
<div class="errorblock">
Your login attempt was not successful, try again.<br /> Caused :
${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
</div>
</c:if>
LoginController.java:
@RequestMapping(value="/loginfailed", method = RequestMethod.GET)
public String loginerror(ModelMap model) {
model.addAttribute("error", "true");
return "login";
}
更新:要回答的答案瑪尼,我m使用登錄控制器,其重定向loginfailed請求的login.jsp並正在發送「錯誤」與「真」屬性的值。問題是我無法看到使用這種表達的login.jsp消息:
${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message}
任何想法?非常感謝你!
我已經回答了你對這個職位的更新添加豆,但我無法弄清楚什麼我做錯了。也許你告訴我的重定向?我應該如何根據你對你的回答告訴我什麼來正確地重定向它?謝謝。 – Ricardo
@Ricardo F更新回答 – Mani
好的,我應該如何重寫AuthentificationListener.java來處理失敗處理程序上的這類錯誤?解決這個問題後,我想使用這個處理程序來控制登錄嘗試更新嘗試次數。但這是另一回事。謝謝您的幫助! – Ricardo