Skip to content

Commit 1205737

Browse files
committed
feat: 添加 TokenUtil,抽离 SecurityUtil
1 parent 8580a8d commit 1205737

15 files changed

Lines changed: 276 additions & 247 deletions

File tree

application/src/main/resources/application-dev.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
server:
22
port: 8000
33
spring:
4+
application:
5+
name: ${uni-boot.config.name}
46
redis:
57
host: localhost
68
port: 6379
@@ -22,20 +24,19 @@ spring:
2224
password: ENC(donQ3DazAc4/6B+NFSRdxw==)
2325
driver-class-name: com.p6spy.engine.spy.P6SpyDriver
2426

25-
# 关闭swagger认证
27+
# 关闭 swagger 认证
2628
knife4j:
2729
basic:
2830
enable: false
2931

30-
# uni-boot-admin 配置
32+
# uni-boot 配置
3133
uni-boot:
3234
config:
3335
name: UniBootAdmin
3436
version: 0.0.1
3537
swagger-on: true
3638
dynamic-ds-on: false
3739
file-base-path: D:/uniboot/file/temp/
38-
# swagger 配置
3940
swagger:
4041
title: Swagger 在线文档
4142
description: uni-boot-admin 在线文档 by swagger2
@@ -46,7 +47,6 @@ uni-boot:
4647
module:
4748
application: top.cadecode.uniboot.controller
4849
sample: top.cadecode.uniboot.business.sample.controller
49-
# security 配置
5050
security:
5151
auth-model: redis
5252
token:
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package top.cadecode.uniboot.common.core.util;
2+
3+
import cn.hutool.json.JSONObject;
4+
import cn.hutool.jwt.JWT;
5+
6+
import java.util.Date;
7+
import java.util.List;
8+
9+
/**
10+
* JWT token 工具栏
11+
*
12+
* @author Cade Li
13+
* @date 2023/6/8
14+
*/
15+
public class TokenUtil {
16+
17+
private static final String ID_KEY = "id";
18+
private static final String NAME_KEY = "username";
19+
private static final String ROLES_KEY = "roles";
20+
21+
/**
22+
* 生成 Jwt token
23+
*
24+
* @param id 用户 ID
25+
* @param roles 角色
26+
* @return token 字符串
27+
*/
28+
public static String generateToken(long id, String name, List<String> roles, Long expiration, String secret) {
29+
long expiredTime = System.currentTimeMillis() + expiration * 1000;
30+
return JWT.create()
31+
.setPayload(ID_KEY, id)
32+
.setPayload(NAME_KEY, name)
33+
.setPayload(ROLES_KEY, roles)
34+
.setExpiresAt(new Date(expiredTime))
35+
.setKey(secret.getBytes())
36+
.sign();
37+
}
38+
39+
/**
40+
* 校验 token 正确性
41+
*
42+
* @param token token 字符串
43+
* @return 是否通过校验
44+
*/
45+
public static boolean verifyToken(String token, String secret) {
46+
try {
47+
return JWT.of(token)
48+
.setKey(secret.getBytes())
49+
.verify();
50+
} catch (Exception e) {
51+
return false;
52+
}
53+
}
54+
55+
/**
56+
* 判断 token 是否过期
57+
*
58+
* @param token token 字符串
59+
* @return 是否过期
60+
*/
61+
public static boolean isExpired(String token, String secret) {
62+
return !JWT.of(token)
63+
.setKey(secret.getBytes())
64+
.validate(0);
65+
}
66+
67+
/**
68+
* 获取 token 内容
69+
*
70+
* @param token token 字符串
71+
* @return JSONObject
72+
*/
73+
public static JSONObject getPayload(String token) {
74+
return JWT.of(token).getPayloads();
75+
}
76+
77+
/**
78+
* 获取 token 内容 json 串
79+
*
80+
* @param token token 字符串
81+
* @return json 串
82+
*/
83+
public static String getPayloadStr(String token) {
84+
return JWT.of(token).getPayloads().toString();
85+
}
86+
}

framework/src/main/java/top/cadecode/uniboot/framework/config/SecurityConfig.java

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,11 @@ public class SecurityConfig {
6060
*/
6161
private List<String> ignoreUrls;
6262

63+
/**
64+
* JWT Token 配置
65+
*/
66+
private TokenConfig token;
67+
6368
/**
6469
* 登录路径
6570
*/
@@ -71,7 +76,6 @@ public class SecurityConfig {
7176
public static final String USERNAME_PARAMETER = "username";
7277
public static final String PASSWORD_PARAMETER = "password";
7378

74-
7579
/**
7680
* 注销路径
7781
*/
@@ -174,4 +178,26 @@ public void configure(WebSecurity web) {
174178
}
175179
};
176180
}
181+
182+
/**
183+
* JWT 配置类
184+
*/
185+
@Data
186+
public static class TokenConfig {
187+
188+
/**
189+
* token 请求头字段
190+
*/
191+
private String header;
192+
193+
/**
194+
* token 过期时间,单位秒
195+
*/
196+
private Long expiration;
197+
198+
/**
199+
* 密钥
200+
*/
201+
private String secret;
202+
}
177203
}

framework/src/main/java/top/cadecode/uniboot/framework/controller/AuthController.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
import top.cadecode.uniboot.common.plugin.log.enums.LogTypeEnum;
1717
import top.cadecode.uniboot.framework.annotation.ApiFormat;
1818
import top.cadecode.uniboot.framework.config.SecurityConfig;
19-
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
19+
import top.cadecode.uniboot.framework.util.SecurityUtil;
2020

2121
import javax.servlet.http.HttpServletRequest;
2222
import javax.servlet.http.HttpServletResponse;
@@ -35,8 +35,6 @@
3535
@RequestMapping("auth")
3636
public class AuthController {
3737

38-
private final TokenAuthHolder tokenAuthHolder;
39-
4038
/**
4139
* 复用Security login接口,方便swagger展示
4240
*/
@@ -50,7 +48,7 @@ public ApiResult<?> login(HttpServletRequest request, HttpServletResponse respon
5048
.form(SecurityConfig.USERNAME_PARAMETER, username)
5149
.form(SecurityConfig.PASSWORD_PARAMETER, password)
5250
.execute();
53-
response.addHeader(tokenAuthHolder.getHeader(), loginRes.header(tokenAuthHolder.getHeader()));
51+
response.addHeader(SecurityUtil.getHeader(), loginRes.header(SecurityUtil.getHeader()));
5452
return JacksonUtil.toBean(loginRes.body(), ApiResult.class);
5553
}
5654

@@ -63,7 +61,7 @@ public ApiResult<?> login(HttpServletRequest request, HttpServletResponse respon
6361
public ApiResult<?> logout(HttpServletRequest request, HttpServletResponse response) {
6462
String replacedURL = request.getRequestURL().toString().replace("/auth/logout", SecurityConfig.LOGOUT_URL);
6563
HttpResponse loginRes = HttpUtil.createPost(replacedURL)
66-
.header(tokenAuthHolder.getHeader(), request.getHeader(tokenAuthHolder.getHeader()))
64+
.header(SecurityUtil.getHeader(), request.getHeader(SecurityUtil.getHeader()))
6765
.execute();
6866
return JacksonUtil.toBean(loginRes.body(), ApiResult.class);
6967
}

framework/src/main/java/top/cadecode/uniboot/framework/controller/SysUserController.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,10 @@
2222
import top.cadecode.uniboot.framework.bean.vo.SysMenuVo.SysMenuTreeVo;
2323
import top.cadecode.uniboot.framework.bean.vo.SysUserVo.SysUserRolesVo;
2424
import top.cadecode.uniboot.framework.convert.SysUserConvert;
25-
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
2625
import top.cadecode.uniboot.framework.service.SysMenuService;
2726
import top.cadecode.uniboot.framework.service.SysRoleService;
2827
import top.cadecode.uniboot.framework.service.SysUserService;
28+
import top.cadecode.uniboot.framework.util.SecurityUtil;
2929

3030
import javax.validation.Valid;
3131
import javax.validation.constraints.NotEmpty;
@@ -60,15 +60,15 @@ public class SysUserController {
6060
@ApiOperation("获取用户信息")
6161
@PostMapping("get_info")
6262
public SysUserInfoDto getInfo() {
63-
SysUserDetailsDto userDetails = TokenAuthHolder.getUserDetails(null);
63+
SysUserDetailsDto userDetails = SecurityUtil.getUserDetails(null);
6464
List<SysMenuTreeVo> sysMenuTreeVos = sysMenuService.listTreeVoByRoles(userDetails.getRoles());
6565
return SysUserInfoDto.builder().menuList(sysMenuTreeVos).build();
6666
}
6767

6868
@ApiOperation("修改用户信息(用户中心)")
6969
@PostMapping("modify_info")
7070
public boolean modifyInfo(@RequestBody @Valid SysUserModifyInfoRequest request) {
71-
SysUserDetailsDto userDetails = TokenAuthHolder.getUserDetails(null);
71+
SysUserDetailsDto userDetails = SecurityUtil.getUserDetails(null);
7272
SysUser po = SysUserConvert.INSTANCE.requestToPo(request);
7373
po.setId(userDetails.getId());
7474
return sysUserService.updateById(po);
@@ -77,7 +77,7 @@ public boolean modifyInfo(@RequestBody @Valid SysUserModifyInfoRequest request)
7777
@ApiOperation("修改用户密码(用户中心)")
7878
@PostMapping("modify_pass")
7979
public boolean modifyPass(@RequestBody @Valid SysUserModifyPassRequest request) {
80-
SysUserDetailsDto userDetails = TokenAuthHolder.getUserDetails(null);
80+
SysUserDetailsDto userDetails = SecurityUtil.getUserDetails(null);
8181
SysUser sysUser = sysUserService.lambdaQuery().select(SysUser::getPassword)
8282
.eq(SysUser::getId, userDetails.getId()).one();
8383
if (ObjectUtil.notEqual(request.getNewPass(), request.getConfirmedPass())) {

framework/src/main/java/top/cadecode/uniboot/framework/plugin/ApiLogHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,8 @@
1919
import top.cadecode.uniboot.framework.bean.dto.SysLogDto.SysLogInfoDto;
2020
import top.cadecode.uniboot.framework.bean.po.SysLog;
2121
import top.cadecode.uniboot.framework.convert.SysLogConvert;
22-
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
2322
import top.cadecode.uniboot.framework.service.SysLogService;
23+
import top.cadecode.uniboot.framework.util.SecurityUtil;
2424

2525
/**
2626
* Api Log 处理器实现
@@ -63,7 +63,7 @@ public SysLogInfoDto generateLog(ProceedingJoinPoint point, BaseLogInfo baseLogI
6363
.logType(apiLogger.type())
6464
.classMethod(point.getSignature().getDeclaringTypeName() + '.' + point.getSignature().getName())
6565
.exceptional(baseLogInfo.getExceptional())
66-
.accessUser(TokenAuthHolder.getUsername())
66+
.accessUser(SecurityUtil.getUsername())
6767
.description(description)
6868
.url(baseLogInfo.getRequest().getRequestURL().toString())
6969
.threadId(Long.toString(Thread.currentThread().getId()))

framework/src/main/java/top/cadecode/uniboot/framework/plugin/ObjectFillHandler.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import org.apache.ibatis.reflection.MetaObject;
44
import org.springframework.stereotype.Component;
55
import top.cadecode.uniboot.common.plugin.mybatis.handler.AbstractObjectFillHandler;
6-
import top.cadecode.uniboot.framework.security.TokenAuthHolder;
6+
import top.cadecode.uniboot.framework.util.SecurityUtil;
77

88
/**
99
* 对象填充处理器
@@ -15,6 +15,6 @@
1515
public class ObjectFillHandler extends AbstractObjectFillHandler {
1616
@Override
1717
public void updateUser(MetaObject metaObject) {
18-
this.setFieldValByName("updateUser", TokenAuthHolder.getUsername(), metaObject);
18+
this.setFieldValByName("updateUser", SecurityUtil.getUsername(), metaObject);
1919
}
2020
}

0 commit comments

Comments
 (0)