Spring Security 前后端分离 快速上手

Spring Security 前后端分离 快速上手

1.介绍

在spring security中 Authentication 对象管理着当前登录用户,同时也存储着认证信息。Authentication 对象由SecurityContextHolder 对象管理,上下文对象。SecurityContextHolder 对象由SecurityContextHolder管理,属于工具类,只提供一些静态方法,目的是用来保存应用程序中当前使用人的安全上下文。

2.认证授权流程

查询用户信息 --> 判断用户账号密码是否正确 --> 将用户信息放入上下文中

 @GetMapping("/login")
    public String login(String username, String password){
   
        //生成一个包含账号密码的对象
        UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
        //校验生成的对象,返回一个以认证的信息
        Authentication authentication = authenticationManager.authenticate(token);
        //将认证成功的信息放入上下文中
        SecurityContextHolder.getContext().setAuthentication(authentication);
        return "登录成功";
    }

上下文中有该对象就代表已经成功。

授权的信息可以在封装用户信息的时候写入。事实上spring security也确实提供了这么一个方法。

3.认证授权

在上面的登录代码中我们可以看到我们传入的待认证的账号密码被封装成了一个对象,随后该对象又被传入认证器中去做认证逻辑。用户传过来的信息要和我们存储的信息做比对,这样才能知道用户传入的数据对不对。spring security提供了一个用户对象UserDetial对象,提供了一些通用的属性。而认证器中就是通过一个业务对象来获取用户对象,然后去判断密码等信息是否相等。

//用户对象
public interface UserDetails extends Serializable {
   
   /**
    * 用户权限集合
    */
   Collection<? extends GrantedAuthority> getAuthorities();
   /**
    * 用户密码
    */
   String getPassword();
   /**
    * 用户名
    */
   String getUsername();
   /**
    * 用户没过期返回true,反之则false
    */
   boolean isAccountNonExpired();
   /**
    * 用户没锁定返回true,反之则false
    */
   boolean isAccountNonLocked();
   /**
    * 用户凭据(通常为密码)没过期返回true,反之则false
    */
   boolean 

你可能感兴趣的:(java,spring)