Używamy zabezpieczeń Spring 3.0.5, Java 1.6 i Tomcat 6.0.32. W naszym pliku konfiguracyjnego .xml mamy:Jak mogę uzyskać nazwę użytkownika po nieudanym logowaniu za pomocą wiosennego zabezpieczenia?
<form-login login-page="/index.html" default-target-url="/postSignin.html" always-use-default-target="true"
authentication-failure-handler-ref="authenticationFailureHandler"/>
i naszą authenticationFailureHandler
zdefiniowany jako:
<beans:bean id="authenticationFailureHandler" class="org.springframework.security.web.authentication.ExceptionMappingAuthenticationFailureHandler">
<beans:property name="exceptionMappings">
<beans:props>
<beans:prop key="org.springframework.security.authentication.BadCredentialsException">/index.html?authenticationFailure=true</beans:prop>
</beans:props>
</beans:property>
</beans:bean>
Java
@RequestMapping(params={"authenticationFailure=true"}, value ="/index.html")
public String handleInvalidLogin(HttpServletRequest request) {
//... How can I get the username that was used???
// I've tried:
Object username = request.getAttribute("SPRING_SECURITY_LAST_USERNAME_KEY");
Object username = request.getAttribute("SPRING_SECURITY_LAST_USERNAME"); // deprecated
}
więc jesteśmy kierowanie całą BadCredentialsExceptions
do index.html
i IndexController
. W wersji IndexController
chciałbym uzyskać username
, który został użyty do nieudanej próby logowania. Jak mogę to zrobić?
Próbowałem, ale to nie działa –
Mamy dokładnie ten kod działający w naszej konfiguracji. Nie mogę ci powiedzieć, dlaczego to nie zadziałałoby w twoim. Nie musieliśmy konfigurować niczego nowego ani zmieniać żadnego pliku .xml w dowolnym miejscu. Adnotacje wydają się wskazywać wiosną na ten kod i uruchamiać go, gdy wystąpi zły login. Działa to doskonale dla nas. – kasdega
może to wymaga innej konfiguracji. Przy okazji, znalazłem alternatywne rozwiązanie. Dziękuję za informację, ale :) –