Token和SessionId的原理是相同的,Session和Token在功能上是相同的,都是为了保持会话。
session
Session用于临时保存用户信息,以键值对的格式储存,要取出用户信息就需要相对应的钥匙key,这是用于让服务器知道这个请求来着谁,通过cookie存放sessionid,服务器获取请求的时候就会通过cookie(sessionid)拿到session里面存放的用户信息,这样可以让用户访问资源而不用不断的重新登录。session的生命周期是服务器启动到服务器关闭。
session大致的工作流程图:
Token
Token是比Session更加安全的身份验证方式,可以用于跨域跨程序调用,Token的不将用户信息存放在服务器或者session里面,Token的信息是加密的而且有时效性,过来时效就需要重新验证,而且Token是可以跨域和跨程序间使用,实现更加安全的资源共享,相比session,session是直接存放用户信息,这样很容易受到攻击,别人可以伪造信息不断访问不断发送请求,很容易拖垮服务器,并且session在跨域的资源共享不够方便。SecurityContextHolder的功能相当于session,但是不像session那样把整个用户信息存放到里面,SecurityContextHolder只有一个username信息也就是账号,由于这个特性,我们在设计数据库表的时候,表之间的关联关系要更加仔细,在和用户信息表相关联的表中添加上账号字段,使这些表更加方便关联,并且更加安全,因为一个客户端访问服务器的用户只有一个SecurityContextHolder,所以用它来进行根据用户来查询的信息更加安全和方便。
Token大致的工作流程图