Skip to content

Commit fc1114c

Browse files
🇨🇳 1.3.0.RELEASE shiro+jwt
1 parent 9027046 commit fc1114c

File tree

2 files changed

+58
-63
lines changed

2 files changed

+58
-63
lines changed

src/main/java/io/geekidea/springbootplus/shiro/service/impl/LoginServiceImpl.java

Lines changed: 39 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,45 @@ public class LoginServiceImpl implements LoginService {
6565
@Autowired
6666
private JwtProperties jwtProperties;
6767

68+
@Override
69+
public ApiResult login(LoginParam loginParam, HttpServletResponse response) {
70+
String username = loginParam.getUsername();
71+
// TODO 从数据库中获取登陆用户信息
72+
LoginSysUserVo loginSysUserVo = new LoginSysUserVo()
73+
.setId(1L)
74+
.setUsername(loginParam.getUsername())
75+
.setSalt("666") // 可选
76+
.setRoles(SetUtils.hashSet("admin"));
77+
78+
if (loginSysUserVo == null) {
79+
log.error("登陆失败,loginParam:{}", loginParam);
80+
return ApiResult.fail(ApiCode.LOGIN_EXCEPTION);
81+
}
82+
// 包装盐值
83+
String newSalt = SaltUtil.getSalt(jwtProperties.getSecret(), loginSysUserVo.getSalt());
84+
// 删除登陆用户盐值,盐值保存到后台Redis缓存中
85+
loginSysUserVo.setSalt(null);
86+
87+
// 生成token字符串并返回
88+
Duration expireDuration = Duration.ofSeconds(jwtProperties.getExpireSecond());
89+
String token = JwtUtil.generateToken(username, newSalt, expireDuration);
90+
log.debug("token:{}", token);
91+
92+
// 创建AuthenticationToken
93+
JwtToken jwtToken = JwtToken.build(token, username, newSalt, jwtProperties.getExpireSecond());
94+
// 从SecurityUtils里边创建一个 subject
95+
Subject subject = SecurityUtils.getSubject();
96+
// 执行认证登陆
97+
subject.login(jwtToken);
98+
99+
// 缓存登陆信息到Redis
100+
loginRedisService.cacheLoginInfo(jwtToken, loginSysUserVo, true);
101+
// 设置响应头
102+
response.setHeader(CommonConstant.JWT_TOKEN_NAME, token);
103+
// 返回token
104+
return ApiResult.ok(token, "登陆成功");
105+
}
106+
68107
@Override
69108
public void refreshToken(JwtToken jwtToken, HttpServletResponse httpServletResponse) {
70109
if (jwtToken == null) {
@@ -114,45 +153,6 @@ public void refreshToken(JwtToken jwtToken, HttpServletResponse httpServletRespo
114153
httpServletResponse.setHeader(CommonConstant.JWT_TOKEN_NAME, newToken);
115154
}
116155

117-
@Override
118-
public ApiResult login(LoginParam loginParam, HttpServletResponse response) {
119-
String username = loginParam.getUsername();
120-
// TODO 从数据库中获取登陆用户信息
121-
LoginSysUserVo loginSysUserVo = new LoginSysUserVo()
122-
.setId(1L)
123-
.setUsername(loginParam.getUsername())
124-
.setSalt("666") // 可选
125-
.setRoles(SetUtils.hashSet("admin"));
126-
127-
if (loginSysUserVo == null) {
128-
log.error("登陆失败,loginParam:{}", loginParam);
129-
return ApiResult.fail(ApiCode.LOGIN_EXCEPTION);
130-
}
131-
// 包装盐值
132-
String newSalt = SaltUtil.getSalt(jwtProperties.getSecret(), loginSysUserVo.getSalt());
133-
// 删除登陆用户盐值,盐值保存到后台Redis缓存中
134-
loginSysUserVo.setSalt(null);
135-
136-
// 生成token字符串并返回
137-
Duration expireDuration = Duration.ofSeconds(jwtProperties.getExpireSecond());
138-
String token = JwtUtil.generateToken(username, newSalt, expireDuration);
139-
log.debug("token:{}", token);
140-
141-
// 创建AuthenticationToken
142-
JwtToken jwtToken = JwtToken.build(token, username, newSalt, jwtProperties.getExpireSecond());
143-
// 从SecurityUtils里边创建一个 subject
144-
Subject subject = SecurityUtils.getSubject();
145-
// 执行认证登陆
146-
subject.login(jwtToken);
147-
148-
// 缓存登陆信息到Redis
149-
loginRedisService.cacheLoginInfo(jwtToken, loginSysUserVo, true);
150-
// 设置响应头
151-
response.setHeader(CommonConstant.JWT_TOKEN_NAME, token);
152-
// 返回token
153-
return ApiResult.ok(token, "登陆成功");
154-
}
155-
156156
@Override
157157
public void logout(String username) {
158158
log.info("logout,username:{}", username);

src/main/resources/config/application.yml

Lines changed: 19 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -38,17 +38,6 @@ spring:
3838

3939
############################## spring-boot-plus start ##############################
4040
spring-boot-plus:
41-
# jwt配置
42-
jwt:
43-
secret: 666666
44-
issuer: spring-boot-plus
45-
audience: web
46-
# 默认过期时间1小时,单位:秒
47-
expire-second: 3600
48-
# 是否刷新token
49-
refresh_token: true
50-
# 刷新token的时间间隔,默认10分钟,单位:秒
51-
refresh_token_countdown: 600
5241
# 拦截器配置
5342
interceptor-config:
5443
permission-config:
@@ -96,7 +85,7 @@ spring-boot-plus:
9685
swagger-ui.html=classpath:/META-INF/resources/
9786
/webjars/**=classpath:/META-INF/resources/webjars/
9887
99-
# Shiro配置
88+
######################## Spring Shiro start ########################
10089
shiro:
10190
# shiro ini 多行字符串配置
10291
filter-chain-definitions: |
@@ -105,7 +94,7 @@ spring-boot-plus:
10594
/templates/**=anon
10695
# 权限配置
10796
permission-config:
108-
# 排除登陆相关
97+
# 排除登陆相关
10998
- urls: /login,/login.html,/welcome.html,/index.html
11099
permission: anon
111100
# 排除Swagger
@@ -117,18 +106,24 @@ spring-boot-plus:
117106
# 测试
118107
- url: /sysUser/getPageList
119108
permission: anon
109+
######################## Spring Shiro end ##########################
120110

121-
111+
############################ JWT start #############################
112+
jwt:
113+
secret: 666666
114+
issuer: spring-boot-plus
115+
audience: web
116+
# 默认过期时间1小时,单位:秒
117+
expire-second: 3600
118+
# 是否刷新token
119+
refresh_token: true
120+
# 刷新token的时间间隔,默认10分钟,单位:秒
121+
refresh_token_countdown: 600
122+
############################ JWT end ###############################
122123

123124
############################### spring-boot-plus end ###############################
124125

125126

126-
############################## Spring Shiro start ##############################
127-
128-
129-
############################### Spring Shiro end ###############################
130-
131-
132127
############################### mybatis-plus start #################################
133128
mybatis-plus:
134129
check-config-location: true
@@ -204,7 +199,7 @@ spring:
204199
############################### Redis 公共配置 end ##################################
205200

206201

207-
#################################### Swagger start ####################################
202+
#################################### Swagger start #################################
208203
# swagger配置
209204
swagger:
210205
base:
@@ -217,10 +212,10 @@ swagger:
217212
title: spring-boot-plus
218213
url: ''
219214
version: 1.0
220-
#################################### Swagger end #####################################
215+
#################################### Swagger end ###################################
221216

222217

223-
################################ Spring boot admin start ################################
218+
############################## Spring boot admin start ##############################
224219
---
225220
spring:
226221
boot:
@@ -252,4 +247,4 @@ info:
252247
project-spring-boot-version: '@spring-boot.version@'
253248
project-mybatis-plus-version: '@mybatis-plus-boot-starter.version@'
254249
project-version: '@project.version@'
255-
################################ Spring boot admin end #################################
250+
############################## Spring boot admin end ###############################

0 commit comments

Comments
 (0)