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;