SpringBoot、uniapp项目整合token验证

SpringBoot、uniapp项目整合token验证

由于本小项目前端uniapp使用token进行验证,所以在写后端的时候我也学习了相关token的使用方法。

什么是token?

简单理解就是token是在服务端生成的一个字符串,传给客户端作为请求携带的令牌。当用户第一次登录的时候,服务器就会生成一个token返回给客户端,之后客户端的请求都会携带这个令牌,服务器解析会拦截这些请求并判断令牌是否有效,如果没有token令牌或者失效就会拦截下来。

前端配置

首先在前端配置好网格拦截器,对于请求都带上token以便后端进行身份验证,前端使用的是uView框架,安装并配置好uView之后,下面就是interceptor拦截器,在mian.js中引入

module.exports = (vm) => {
   
   
      // 初始化请求配置
      uni.$u.http.setConfig((config) => {
   
   
          /* config 为默认全局配置*/
          config.baseURL = 'http://192.168.194.251'; /* 根域名 */
          return config
      })
  	
  	// 请求拦截,使请求携带token
  	uni.$u.http.interceptors.request.use((config) => {
   
    
      const token = uni.getStorageSync("token");
      config.header.Authorization = "Bearer " + token;
      config.header.Accept = "application/json";
      return config;
  	})
  	
  	//响应拦截
  	uni.$u.http.interceptors.response.use((response) => {
   
   
      console.log(response)
      if (response.statusCode != 200) {
   
   
        console.log('响应拦截成功!=200')
      	return response;
      } else {
   
   
        console.log('响应拦截返回')
      	return response;
      }
    }, (response) => {
   
    
        console.log('这是响应错误的返回')
        console.log(response)
    		return response
    	})
  }
//引入拦截器
require('@/common/http.interceptor.js')(app)

后端配置

pom引入
        <dependency>
            <groupId>io.jsonwebtoken</groupId>
            <artifactId>jjwt</artifactId>
            <version>0.9.0</version>
        </dependency>
application.yml
audience:
  clientId: 098f6bcd4621d373cade4e832627b4f6
   # 密钥, 经过Base64加密, 可自行替换。Base64加解密工具:http://tool.chinaz.com/Tools/Base64.aspx
  base64Secret: eXViYW9aSk5VU0NFTkVSWVYxLjA=
  # JWT的签发主体,存入issuer
  iss: issued by yubao
  # 过期时间毫秒
  expiresSecond: 604800000
Audience

新建配置信息的实体类,以便获取JWT配置:

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@ConfigurationProperties(prefix = "audience")
@Component
public class Audience {
   
   
    //代表这个JWT的接收对象,存入audience
    private String aud;
    private String base64Secret;
    //JWT的签发主体,存入issuer
    private String iss;
    private int expiresSecond;

}
创建JWT工具类
package com.yubao.zjnu_demo.utils;


import com.yubao.zjnu_demo.common.CustomException;
import com.yubao.zjnu_demo.entity.Audience;
import io.jsonwebtoken.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.util.Base64Utils;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.nio.charset.StandardCharsets;
import java.security.Key;
import java.util.Base64;
import java.util.Date;
### 如何在 Spring Boot 项目中添加 Token 验证机制 #### 添加依赖 为了实现基于 Token验证,可以引入 JWT 或者 Sa-Token 这样的工具库来简化开发流程。如果选择使用 Sa-Token,则需要在 `pom.xml` 文件中加入如下依赖: ```xml <dependency> <groupId>cn.dev33</groupId> <artifactId>sa-token-spring-boot-starter</artifactId> <version>1.28.0</version> </dependency> ``` 此部分操作用于配置项目的环境支持[^3]。 --- #### 创建 Token 验证过滤器 通过创建自定义的 Filter 来拦截 HTTP 请求并完成 Token 的校验工作。下面是一个简单的示例代码片段展示如何编写此类过滤器: ```java import cn.dev33.sa.token.SaTokenException; import cn.dev33.sa.token.stp.StpUtil; import org.springframework.stereotype.Component; import javax.servlet.*; import javax.servlet.annotation.WebFilter; import javax.servlet.http.HttpServletRequest; import java.io.IOException; @Component @WebFilter(filterName = "tokenCheckFilter", urlPatterns = "/*") public class TokenCheckFilter implements Filter { @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; try { // 尝试获取登录身份标识 StpUtil.checkLogin(); // 如果未抛出异常则放行请求 chain.doFilter(request, response); } catch (SaTokenException e) { // 处理 token 校验失败的情况 ((HttpServletResponse)response).sendError(401, "Unauthorized"); } } } ``` 上述代码实现了对所有路径下的请求进行统一的身份验证处理[^2]。 --- #### 后端接收前端传递过来的 Token 并做有效性检测 当客户端发起任何 API 调用时,都需附带有效的 Token 值于请求头部字段 Authorization 下面作为 Bearer 类型令牌提交给服务器端解析判断其合法性[^5]。服务端接收到该参数后可通过调用相应方法进一步确认当前用户的在线状态以及其他附加属性信息等。 例如,在控制器层可以直接利用注解形式快速标注哪些接口资源受保护而必须经过认证才能访问: ```java @RestController @RequestMapping("/api/user") public class UserController { @GetMapping("/info") public String getUserInfo() { Long userId = StpUtil.getLoginIdAsLong(); return "User Info For ID:" + userId ; } } ``` 这里展示了如何从已登录状态下提取具体用户编号以便后续业务逻辑查询所需数据[^1]。 --- #### 总结说明 以上就是关于如何在一个标准版 springboot 工程里边集成 sa-token 实现基础级别的 token 认可过程的一个概括介绍。实际应用场景当中可能还会涉及到更多复杂场景比如跨域资源共享 CORS 设置等问题也需要额外考虑进去解决掉才行哦! ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值