简介
公司新项目,需要做移动端(Android和IOS),登录模块,两个移动端人员提出用token来校验登录状态,一脸懵懵的,没做过,对于token的基本定义都模棱两可,然后查资料查查查,最终OK完成,写篇博客记录一下
思路:
1、基于session登录
基于session的登录(有回话状态),用户携带账号密码发送请求向服务器,服务器进行判断,成功后将用户信息放入session,用户发送请求判断session中是否有用户信息,有的话放行,没有的话进行拦截,但是考虑到时App产品,牵扯到要判断用户的session,需要sessionID,还要根据sessionId来获取session,在进行校验,还有sessionId的一个存储等等,所以没考虑用session
2、基于token登录
基于token的登录,是不存在回话状态,大概思路,在用户初次等路的时候,校验用户账号密码,成功后给其生成一个token,token=用户ID+时间戳+过期时间+一个自己平台规定的签名,使用jjwt生成一个令牌,然后对其进行存库,用户每次访问接口,都会在头部Headers中带上token,后来拦截器对其进行拦截,如果token为空或错误则让其登录,如果有token,获取token进行其解析,取出里面的用户ID,根据用户ID查询数据库中所存token,判断其是否正确,正确使其登录,错误则提示登录,大致思路就是这样,下面开始代码
导入jar包
<!-- 生成token -->
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
开发步骤
1、创建token库
2、创建token实体类
package com.prereadweb.user.entity;
import lombok.Data;
/**
* @Description: Token实体类
* @author: Yangxf
* @date: 2019/4/14 12:53
*/
@Data
public class TokenEntity {
/* tokenId */
private Long id;
/* 用户ID */
private Long userId;
/* 刷新时间 */
private int buildTime;
/* token */
private String token;
}
3、编写token的三个方法(添加、查询、修改)
package com.prereadweb.user.mapper;
import com.prereadweb.user.entity.TokenEntity;
import org.apache.ibatis.annotations.Mapper;
/**
* @Description: Token数据库持久层接口
* @author: Yangxf
* @date: 2019/4/14 13:00
*/
@Mapper
public interface Tok