Spring Security 模拟用户登录并授权

摘要

Spring Security 为用户授权示例代码;模拟登录,虚拟授权;使用UserDetailsService从数据库中获取用户信息。然后,使用获取到的用户信息创建一个UsernamePasswordAuthenticationToken对象,并将该对象传递给AuthenticationManager进行身份验证。

@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

weinxin
新逸IT技术
扫一扫关注微信公众号
Admin
  • 版权声明 本文源自 https://blog.xinac.cn 整理 发表于 2022-07-22
  • 转载请注明:https://www.xinac.net/9279.html
评论  0  访客  0
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定