之前的后台由smm+shiro搭建,最近想要pc端实现前后端分离,但移动端和管理端这些公用一个,想要实现前后端分离,而且不影响管理端的操作,管理端是由session存储用户信息,之前的pc端也是,通过shiro实现登录授权认证,现在pc端实现前后分离,这样的话前后交互不安全,同时存在跨域的问题,因此,想实现pc端前后分离,不影响 管理端,所以pc端采用jwt生成token,进行每次操作的验证。
JWT(JSON Web Tokens)是一种用于安全的传递信息而采用的一种标准。Web系统中,我们使用加密的Json来生成Token在服务端与客户端无状态传输,代替了之前常用的Session。
系统采用Redis作为缓存,解决Token过期更新的问题。
JWT登录主要流程:
- 登录时,密码验证通过,取当前时间戳生成签名Token,放在Response Header的Authorization属性中,同时在缓存中记录值为当前时间戳的RefreshToken,并设置有效期。
- 客户端请求每次携带Token进行请求。
- 服务端每次校验请求的Token有效后,同时比对Token中的时间戳与缓存中的RefreshToken时间戳是否一致,一致则判定Token有效。
- 当请求的Token被验证时抛出
TokenExpiredException
异常时说明Token过期,校验时间戳一致后重新生成Token并调用登录方法。 - 每次生成新的Token后,同时要根据新的时间戳更新缓存中的RefreshToken,以保证两者时间戳一致。
在使用jwt时 maven中添加以下
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.6.0</version> </dependency>
jwt生成
/** * 生成token * @param id * @param subject * @param ttlMillis * @param claims * @return * @throws Exception */ public static String createJWT(