@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技术
扫一扫关注微信公众号
评论