К примеру, как то так (кусок кода из контроллера):
// check if user is login
Authentication auth = SecurityContextHolder.getContext().getAuthentication();
if ((!(auth instanceof AnonymousAuthenticationToken)) && auth != null) {
UserDetails userDetail = (UserDetails) auth.getPrincipal();
if (userDetail != null) {
model.addObject("username", userDetail.getUsername());
} else {
model.addObject("username", "");
}
}
,
В конфиге безопасности есть такое:
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="usersManager">
<password-encoder hash="bcrypt"/>
</authentication-provider>
</authentication-manager>
В конфиге контекста приложения объявлен usersManager:
<bean id="usersManager" class="org.whatever.impl.UsersServiceImpl">
<property name="usersDAO" ref="usersDAO"/>
<property name="languageDao" ref="languagesDAO"/>
<property name="roleDAO" ref="roleDAO"/>
<property name="usersViewDAO" ref="usersViewDAO"/>
</bean>
Ну и сам UsersServiceImpl имеет такой вид:
package org.whatever.impl;
/*импорты убрал */
/* интерфейс UsersService наследует org.springframework.security.core.userdetails.UserDetailsService */
public class UsersServiceImpl extends ServiceBase implements UsersService {
@Autowired
private UsersDAO usersDAO;
public void setUsersViewDAO(UsersViewDAO usersViewDAO) {
this.usersViewDAO = usersViewDAO;
}
public UsersDAO getUsersDAO() {
return usersDAO;
}
/*сократил код*/
/**
* Детали по пользователю, полученному из базы
*/
@Override
@Transactional(readOnly = true)
public UserDetails loadUserByUsername(String login) throws UsernameNotFoundException {
User userFromDb = this.getUsersDAO().getUserByLogin(login);
if (userFromDb != null) {
return new org.whatever.UserView(userFromDb); /*применяет org.springframework.security.core.userdetails.UserDetails*/
}
String result = new Formatter().format("User with login %s not found", login).toString();
throw new UsernameNotFoundException(result);
}
}