SpringBoot框架集成token实现登录校验功能(APP)

这篇博客记录了如何在SpringBoot项目中使用token进行APP登录验证的过程。作者首先对比了基于session和token的登录方式,由于移动端的考虑,选择了token登录。详细步骤包括导入相关jar包,创建token数据库和实体类,编写添加、查询和修改token的方法,设置拦截器,以及登录控制器和服务的实现,最后展示了生成token的代码。
摘要由CSDN通过智能技术生成

简介

公司新项目,需要做移动端(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
  • 13
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 31
    评论
Spring Boot框架可以集成Token实现登录校验功能,以下是一种实现方式: 首先,我们需要引入相关的依赖,包括Spring Security和JWT(JSON Web Token)依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId> </dependency> <dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.11.2</version> </dependency> ``` 然后,我们创建一个Token生成和校验的工具类,该类可以用于生成Token和解析Token中的信息,这里使用JWT生成Token: ```java import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import javax.annotation.PostConstruct; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; @Component public class TokenUtils { @Value("${jwt.secret}") private String secret; private static String staticSecret; @PostConstruct private void init() { staticSecret = secret; } public static String generateToken(String username) { return Jwts.builder() .setSubject(username) .signWith(SignatureAlgorithm.HS512, staticSecret) .compact(); } public static String getUsernameFromToken(String token) { return Jwts.parser() .setSigningKey(staticSecret) .parseClaimsJws(token) .getBody() .getSubject(); } public static boolean validateToken(String token, String username) { String tokenUsername = getUsernameFromToken(token); return tokenUsername.equals(username); } } ``` 接下来,我们创建一个登录接口,在用户登录时生成Token并返回给客户端: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @RestController public class LoginController { @Autowired private TokenUtils tokenUtils; @Autowired private PasswordEncoder passwordEncoder; @PostMapping("/login") public String login(@RequestBody UserLoginRequest request) { String username = request.getUsername(); String password = request.getPassword(); // 根据用户名和密码验证登录信息,这里省略具体的验证逻辑 if (authenticate(username, password)) { String token = tokenUtils.generateToken(username); return token; } else { throw new RuntimeException("Invalid username or password"); } } private boolean authenticate(String username, String password) { // 验证用户名和密码,这里假设只有一个固定的用户名和密码 String validUsername = "admin"; String validPassword = "password"; return validUsername.equals(username) && passwordEncoder.matches(password, validPassword); } } ``` 最后,我们可以在需要进行登录校验接口上加上`@PreAuthorize`注解,指定需要进行校验的权限: ```java import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController public class HelloController { @GetMapping("/hello") @PreAuthorize("hasRole('ROLE_USER')") public String hello() { return "Hello World!"; } } ``` 以上就是使用Spring Boot框架集成Token实现登录校验功能的基本步骤。通过生成Token并在需要校验接口上进行权限校验,可以实现登录功能
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值