@Autowired
private UserDetailsService userDetailsService;
@Autowired
private AuthenticationManager authenticationManager;
public void login(String username, String token) {
/*
UserDetails userDetails = org.springframework.security.core.userdetails.User
.withUsername("user")
.password("password")
.passwordEncoder(s -> PasswordEncoderFactories.createDelegatingPasswordEncoder().encode(s))
.roles("USER")
.build();
*/
UserDetails userDetails = userDetailsService.loadUserByUsername(username);
if (userDetails != null) {
// 这里可以进行一些其他的用户信息验证,例如验证token是否有效等
UsernamePasswordAuthenticationToken authenticationToken =
new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
Authentication authentication = authenticationManager.authenticate(authenticationToken);
SecurityContextHolder.getContext().setAuthentication(authentication);
} else {
// 用户不存在,进行一些其他处理,如创建新用户等
// do something
}
}正常情况下,UserDetails通过UserDetailsService.loadUserByUsername("")获取,上述代码可用于:
1、模拟用户登录文章源自新逸网络-https://www.xinac.net/9279.html
2、接口调试时为用户授权文章源自新逸网络-https://www.xinac.net/9279.html
3、业务之外的虚拟授权文章源自新逸网络-https://www.xinac.net/9279.html
4、and so on...文章源自新逸网络-https://www.xinac.net/9279.html
文章源自新逸网络-https://www.xinac.net/9279.html
login()方法接受用户名和令牌作为参数,并使用UserDetailsService从数据库中获取用户信息。然后,使用获取到的用户信息创建一个UsernamePasswordAuthenticationToken对象,并将该对象传递给AuthenticationManager进行身份验证。如果身份验证成功,则将身份验证信息存储在Spring Security的上下文中,用户就可以访问系统中的受保护资源了。文章源自新逸网络-https://www.xinac.net/9279.html
文章源自新逸网络-https://www.xinac.net/9279.html 文章源自新逸网络-https://www.xinac.net/9279.html

新逸IT技术
扫一扫关注微信公众号









评论