2014-01-15 2 views
0

я использовал учебник по этой ссылке:Spring не показывая

http://www.mkyong.com/spring-security/display-custom-error-message-in-spring-security/

Чтобы показать сообщение об ошибке на форме входа в систему, и я получил его в начале. Но после того, как объявить аутентификации безотказной-обработчик-реф = «myAuthErrorHandler» для пользовательского обработчика отказа аутентификатора я не могу видеть это пользовательское сообщение на форме авторизации:

enter image description here

Что я делаю неправильно? Может ли кто-нибудь объяснить мне, что произойдет и почему «Неверное имя пользователя или пароль» не отображается?

Вот код:

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"/> 

Spring Security:

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

} 

Update: Чтобы ответить на Мани ответ, я м с использованием Контроллер, который перенаправляет loginfailed запросов login.jsp и отправку «ошибки» атрибута с «истинного» значением. Проблема в том, что я не могу увидеть сообщение на login.jsp используя это выражение:

${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 

Любая идея? Спасибо Большое!

ответ

0

При отказе от аутентификации вы попросили перенаправить на другую страницу.

response.sendRedirect(request.getContextPath() 
     + "/abc/main/loginfailed"); 

Ваш идентификатор jsp не отображается? у него нет div как errorblock на странице входа? вы видите другую ошибку в loginfailed.jsp?

EDIT:

Хорошо, я понял.До authentication-failure-handler-ref="myAuthErrorHandler" Весна Обрабатывает случай сбоя и помещает сообщение в сеанс с ключом SPRING_SECURITY_LAST_EXCEPTION.
После добавления обработчика отказов
т.е. authentication-failure-handler-ref="myAuthErrorHandler"
Вы должны обработать ошибку. Вы можете установить сообщение в сеансе. или просто вызовите super.onAuthenticationFailure. Ваш обработчик ничего не делает !!!

+0

Я уже ответил вам на обновление на этой должности, но я не могу понять, что я делаю неправильно. Может быть, перенаправление вы мне говорите? Как я должен перенаправить его должным образом в соответствии с тем, что вы говорите мне в ответ ?. Благодарю. – Ricardo

+0

@ Ricardo F Обновлено ответ – Mani

+0

Хорошо, и как мне переписать AuthentificationListener.java для обработки таких ошибок в обработчике сбоев? После исправления этого я хотел использовать этот обработчик для управления входами, чтобы обновить количество попыток. Но это уже другая история. Спасибо за помощь! – Ricardo

0
<div style="color: red"> 
    Your login attempt was not successful, try again.<br /> Caused : 
    ${sessionScope["SPRING_SECURITY_LAST_EXCEPTION"].message} 
</div> 

использование этого удалите форма Login.jsp

создать файл свойств имя как

  • mymessages.properties
  • AbstractUserDetailsAuthenticationProvider.badCredentials = Неверное имя пользователя или пароль

и сохраните его и разместите в своем проекте clas SPATH

и добавить фасоль в вашей весной-contex.xml

<bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>mymessages</value> 
     </list> 
    </property> 
</bean> 
Смежные вопросы