Да, вы должны реализовать свой собственный UserDetail, который будет иметь атрибут id.
Затем вы заполните этот объект во время аутентификации в вашей реализации UserDetailService.
Например:
@Service("CustomUserDetailService")
public class CustomUserDetailService implements UserDetailsService{
@Autowired
private IUserDao userDao;
@Override
public UserDetails loadUserByUsername(String name) throws UsernameNotFoundException, DataAccessException {
User user = userDao.loadByName(name);
CustomUserDetail customUserDetail = new CustomUserDetail();
customUserDetail.setId(user.getId());
customUserDetail.setPassword(user.getPassword());
return customUserDetail ;
}
После этого вы можете получить что-нибудь от своего принципала:
<sec:authentication property="principal.id"/>