Spring Security 自定义用户详细信息服务和自定义用户类
2022-09-04 21:23:32
我正在尝试在de user principal对象中保存其他数据。
我所做的是:
将“UserDetails”接口实现到我现有的用户类,其中保存了我的其他数据(如电子邮件地址等)。
@Entity
public class User implements UserDetails {
然后我创建了一个UserDetailsService实现:
@Service
public class UserDetailsServiceImpl implements UserDetailsService {
@Autowired
UserDAO userDAO;
@Override
public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException {
User user = userDAO.findOneByUsername(username);
if (user == null)
throw new UsernameNotFoundException("username " + username
+ " not found");
System.out.println("---------------------> FOUND ------------->"
+ user.getEmail());
return user;
}
}
最后一步是在我的安全配置中添加用户详细信息服务。
@Configuration
@EnableWebMvcSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Autowired
UserDetailsService userDetailsService;
@Override
protected void configure(AuthenticationManagerBuilder auth)
throws Exception {
auth.userDetailsService(userDetailsService());
// ...
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.userDetailsService(userDetailsService());
// ...
}
@Override
protected UserDetailsService userDetailsService() {
return userDetailsService;
}
我在控制台中看到“loadUserByName”被调用了两次(因为“Found”输出)。
当我尝试访问控制器中的主体对象时->
System.out.println(SecurityContextHolder.getContext()
.getAuthentication().getPrincipal());
我无法获得其他数据。当我尝试将其强制转换为我的User对象时,我得到一个无法强制转换的异常。
我错过了什么吗?
提前感谢您。