其他分享
首页 > 其他分享> > 从0到1开发测试平台(七)后端增加登录token返回

从0到1开发测试平台(七)后端增加登录token返回

作者:互联网

转载:https://cloud.tencent.com/developer/article/1683279
什么是token

Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

为什么要使用token

我们可以登录的时候生成token,然后接口带上token,我们就可以去数据库或者缓存里查询token是否有效,有效则认为验证成功。

生成token的几种方式:

(1)最简单省事的方法,使用uuid生成token

(2)使用jwt令牌

(3)用session值作为Token

(4)用设备号/设备mac地址作为Token

一般对外的系统采用Jwt令牌的比较多,为了快速搭建我们的平台,这里我们使用第一种。

项目中引入token

1.数据库新增user_login表

DROP TABLE IF EXISTS user_login;


CREATE TABLE user_login (
id bigint(16) NOT NULL AUTO_INCREMENT,
user_id bigint(16) NULL DEFAULT 0,
token varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,
expiration_date timestamp(0) NULL DEFAULT NULL,
create_date timestamp(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0),
modify_date timestamp(0) NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP(0),
is_valid tinyint(2) NOT NULL DEFAULT 1,
PRIMARY KEY (id) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 158 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

2.引入jpa第三方依赖

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

3.增加BaseDomain和UserLogin实体类

package com.test.demo.bean;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;
import lombok.ToString;
import javax.persistence.MappedSuperclass;
import java.util.Date;

@ToString
@Data
@MappedSuperclass
public class BaseDomain {
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createDate;
    @JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH-mm-ss")
    private Date modifyDate;
    private Integer isValid;

}
package com.test.demo.bean;
import lombok.Data;
import lombok.ToString;
import javax.persistence.*;
import java.sql.Timestamp;

@Entity
@ToString
@Data
@Table(name="user_login")
public class UserLogin extends BaseDomain {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    private Long userId;
    private String token;
    private Timestamp expirationDate;
}

4.增加UserRepository便可以使用jpa直接对应数据库的基本增删改查

package com.test.demo.mapper;
import com.test.demo.bean.UserLogin;
import org.springframework.data.jpa.repository.JpaRepository;
import tk.mybatis.mapper.common.Mapper;

//增加UserRepository便可以使用jpa直接对应数据库的基本增删改查
public interface UserLoginRepository extends JpaRepository<UserLogin,Long>{
}

5.在UserServiceImpl.java中的login方法里加入生产token的代码

@Autowired
private UserLoginRepository userLoginRepository;
@Override
    public Result login(String name, String password) {
        User user = queryUserByName(name);
        if(user == null){
            return Result.resultError(ResultType.USER_NOT_EXIST, StatusCode.USER_NOT_EXIST);
        }
        if(!password.equals(user.getPassword())){
            return Result.resultError(ResultType.USER_NAME_OR_PASSWORD_EORROR,StatusCode.USER_NAME_OR_PASSWORD_EORROR);
        }
        //生成 token
        String uuid = UUID.randomUUID().toString();
        UserLogin userLogin = new UserLogin();
        userLogin.setToken(uuid);
        userLogin.setIsValid(1);
        Calendar calendar = Calendar.getInstance();
        calendar.add(calendar.DATE,30);
        userLogin.setExpirationDate(new Timestamp(calendar.getTime().getTime()));
        userLogin.setUserId((long) user.getId());
        userLogin.setCreateDate(new Date());
        userLogin = userLoginRepository.save(userLogin);
        user.setToken(userLogin.getToken());
        return Result.resultSuccess(null,user,ResultType.LOGIN_SUCCESS);
    }

6.通过postman访问登录接口,看到成功返回如下

打开数据库user_login表,看到成功插入了一条登录信息,调用多次接口插入多次

补充:JPA是什么?

JPA(Java Persistence API)是Sun官方提出的Java持久化规范. 为Java开发人员提供了一种对象/关联映射工具来管理Java应用中的关系数据. 它的出现是为了简化现有的持久化开发工作和整合ORM技术. 结束各个ORM框架各自为营的局面。

JPA仅仅是一套规范,不是一套产品, 也就是说Hibernate, TopLink等是实现了JPA规范的一套产品。

Spring Data JPA是Spring基于ORM框架、JPA规范的基础上封装的一套JPA应用框架,是基于Hibernate之上构建的JPA使用解决方案,用极简的代码实现了对数据库的访问和操作,包括了增、删、改、查等在内的常用功能。

标签:登录,userLogin,private,token,user,测试,import,NULL
来源: https://www.cnblogs.com/nanao/p/15223664.html