SpringSecurity的核心功能是认证和授权:
认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户。
授权:经过认证后判断当前用户是否具有进行某个操作的权限。
实际前后端分离的项目中,登录校验的一个流程:
前后端分离的情况下去进行认证,核心其实依赖的就是token,你可以理解成它是一个加密之后的一个字符串
我通过你是否携带这个token,我可以去判断你是不是我系统的用户,我也可以拿到token之后去获取加密之前的一些数据,来判断你究竟是哪一个用户,这是它的一个核心思路
登录的时候,你输入用户名密码,我去进行一个数据库的比对,发送给服务器,服务器里面会进行数据库的比较。比较之后,如果你用户密码都是正确的,那我会把用户信息,生成一个jwt,相当于对它这些数据进行了一个加密,生成了一个jwt之后,把jwt这个token响应给前端。
那前端它会自己进行一个存储啊,具体怎么存?其实我们不用太关心,这是前端的事情
然后前端再去访问其他请求的时候,都会在请求头当中携带他所存储的那个token,这是前端的代码要实现的啊。
既然他携带了接口的话,那我们可以怎么做呢?你的token可能是乱写的,我就可以去获取请求头里面的token去进行解析,如果解析是不通过的,说明你这个token是有问题的,不合法的,那肯定不会让你访问的,那如果你这个token是合法的,那我就可以解析成功。
解析成功就可以获取到之前所加密的一些数据,比如说userId或者其他的一些资料。 拿到userId之后,我就可以去获取用户其他的一些相关信息。比如说具体这个用户有哪些权限,能不能访问这个接口,都可以进行相应的一些校验,一些判断。
如果确定了的确能够访问我这个资源,那我就去让他访问。然后访问完之后把这些数据再响应给前端就ok了
这就是一个认证的一个流程。那其实核心就是通过这个token去进行一个校验,登录的时候,我会把token响应给前端,以后它的所有请求请求当中,都会携带的token。