Я реализовал customAuthenticationFailureHandler, чтобы настроить реакцию на ошибку для разных источников.
Когда я выбрасываю исключение из customAuthenticationFailureHandler, он показывает URL ошибки входа по умолчанию, который является /login?error.
Но там я не получаю SPRING_SECURITY_LAST_EXCEPTION.
Вот мой код.
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response,
AuthenticationException exception) throws IOException, ServletException {
System.out.println(exception.getMessage());
String requestSource = request.getHeader(Constants.HTTP_REQUEST_HEADER_SOURCE);
if (!Constants.HTTP_REQUEST_HEADER_SOURCE_MOBILE.equals(requestSource)) {
throw exception;
} else {
JSONObject res = new JSONObject();
res.put("statusCode", HttpServletResponse.SC_UNAUTHORIZED);
res.put("statusMessage", (exception.getMessage()!=null)?exception.getMessage():"Bad credentials");
response.getWriter().write(res.toJSONString());
}
}
<security:form-login login-page="/login"
default-target-url="/system" authentication-failure-url="/login?error"
username-parameter="username" password-parameter="password"
authentication-success-handler-ref="customAuthenticationSuccessHandler"
authentication-failure-handler-ref="customAuthenticationFailureHandler"/>
Вместо исключения я попробовал также response.sendRedirect("login/error");
.
В обоих случаях я не получаю SPRING_SECURITY_LAST_EXCEPTION на странице входа в систему.
Кто-нибудь, пожалуйста, помогите мне решить эту проблему.
Спасибо
Sanooj M