Я пытаюсь установить время LastLogin для пользователя в пользовательском AuthenticationSuccessHandler, однако я не знаю способа получения имени пользователя (поскольку все функции доступа, похоже, возвращают ноль, потому что я не работаю сUserDetails).Пользовательские данные хранятся в таблице MYSQL, и я использую Hibernate для извлечения / создания / обновления пользователей.В моем приложении я использую самописный класс User, который не имеет ничего общего с классом Spring User.У меня нет пользовательских UserDetails / UserDetailsService, и я бы хотел их избежать, поскольку я не могу изменить макет таблицы БД (как при добавлении дополнительных значений)
AuthenticationSuccessHandler выглядит следующим образом:
public class PostSuccessfulAuthenticationHandler extends SimpleUrlAuthenticationSuccessHandler {
@Autowired
private UserService userService;
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) throws ServletException, IOException
{
userService.trackUserLogin(authentication.getName()); //Doesn't work, getName seems to return null
super.onAuthenticationSuccess(request, response, authentication);
}
}
Мое applicationContext-security.xml выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd">
<global-method-security pre-post-annotations="enabled"/>
<!-- authentication-success-handler-ref='authSuccHandler' -->
<http use-expressions="true" disable-url-rewriting="true">
<intercept-url pattern="..." access="hasRole('ROLE_USER')" />
<form-login login-page="/index.htm"
authentication-failure-handler-ref='authFailureHandler'
authentication-success-handler-ref='authSuccHandler'
default-target-url='...'
always-use-default-target='true'/>
<logout logout-success-url="..."/>
<session-management invalid-session-url="/index.htm">
<concurrency-control max-sessions="2" error-if-maximum-exceeded="true" />
</session-management>
</http>
<authentication-manager>
<authentication-provider>
<jdbc-user-service data-source-ref="mysqldataSource"
authorities-by-username-query="select username, authority from benutzer where username = ?"
users-by-username-query="select username, password, enabled from benutzer where username = ?"/>
</authentication-provider>
</authentication-manager>
</beans:beans>
Сам логин работает нормально (даже если я просто закомментирую строку trackUserLogin в моем AuthenticationSuccessHandler), что заставляет меня поверить, чточтобы получить способ получить это имя пользователя.Кто-нибудь может помочь?