Skip to content

Commit 1ebd539

Browse files
committed
fix:修改token刷新策略,解决退出登录存在的问题,为了消除歧义移除admin账号的特权
1 parent d39306c commit 1ebd539

File tree

6 files changed

+46
-50
lines changed

6 files changed

+46
-50
lines changed

mogu_admin/src/main/java/com/moxi/mogublog/admin/annotion/AuthorityVerify/AuthorityVerifyAspect.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -74,12 +74,6 @@ public Object doAround(ProceedingJoinPoint joinPoint, AuthorityVerify authorityV
7474

7575
// 解析出请求者的ID和用户名
7676
String adminUid = request.getAttribute(SysConf.ADMIN_UID).toString();
77-
String userName = request.getAttribute(SysConf.USER_NAME).toString();
78-
// 如果是Admin账号,直接放权
79-
if(SysConf.ADMIN.equals(userName)) {
80-
//执行业务
81-
return joinPoint.proceed();
82-
}
8377

8478
String visitUrl = redisUtil.get(RedisConf.ADMIN_VISIT_MENU + RedisConf.SEGMENTATION + adminUid);
8579

mogu_admin/src/main/java/com/moxi/mogublog/admin/restapi/LoginRestApi.java

Lines changed: 22 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,8 @@
2828
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
2929
import org.springframework.security.crypto.password.PasswordEncoder;
3030
import org.springframework.web.bind.annotation.*;
31+
import org.springframework.web.context.request.RequestContextHolder;
32+
import org.springframework.web.context.request.ServletRequestAttributes;
3133

3234
import javax.servlet.http.HttpServletRequest;
3335
import java.util.*;
@@ -199,35 +201,21 @@ public String getMenu(HttpServletRequest request) {
199201
Collection<CategoryMenu> categoryMenuList = new ArrayList<>();
200202
Admin admin = adminService.getById(request.getAttribute(SysConf.ADMIN_UID).toString());
201203

202-
/**
203-
* 判断该用户是否是admin账号,如果是开放所有的菜单
204-
*/
205-
if(SysConf.ADMIN.equals(admin.getUserName())) {
206-
QueryWrapper<CategoryMenu> queryWrapper = new QueryWrapper<>();
207-
queryWrapper.eq(SysConf.STATUS, EStatus.ENABLE);
208-
categoryMenuList = categoryMenuService.list(queryWrapper);
209-
} else {
210-
/**
211-
* 如果非admin账号
212-
* 加载这些角色所能访问的菜单页面列表
213-
* 获取该管理员所有角色
214-
*/
215-
List<String> roleUid = new ArrayList<>();
216-
roleUid.add(admin.getRoleUid());
217-
Collection<Role> roleList = roleService.listByIds(roleUid);
218-
219-
List<String> categoryMenuUids = new ArrayList<>();
220-
221-
roleList.forEach(item -> {
222-
String caetgoryMenuUids = item.getCategoryMenuUids();
223-
String[] uids = caetgoryMenuUids.replace("[", "").replace("]", "").replace("\"", "").split(",");
224-
for (int a = 0; a < uids.length; a++) {
225-
categoryMenuUids.add(uids[a]);
226-
}
204+
List<String> roleUid = new ArrayList<>();
205+
roleUid.add(admin.getRoleUid());
206+
Collection<Role> roleList = roleService.listByIds(roleUid);
227207

228-
});
229-
categoryMenuList = categoryMenuService.listByIds(categoryMenuUids);
230-
}
208+
List<String> categoryMenuUids = new ArrayList<>();
209+
210+
roleList.forEach(item -> {
211+
String caetgoryMenuUids = item.getCategoryMenuUids();
212+
String[] uids = caetgoryMenuUids.replace("[", "").replace("]", "").replace("\"", "").split(",");
213+
for (int a = 0; a < uids.length; a++) {
214+
categoryMenuUids.add(uids[a]);
215+
}
216+
217+
});
218+
categoryMenuList = categoryMenuService.listByIds(categoryMenuUids);
231219

232220
// 从三级级分类中查询出 二级分类
233221
List<CategoryMenu> buttonList = new ArrayList<>();
@@ -280,9 +268,12 @@ public String getMenu(HttpServletRequest request) {
280268

281269
@ApiOperation(value = "退出登录", notes = "退出登录", response = String.class)
282270
@PostMapping(value = "/logout")
283-
public String logout(@ApiParam(name = "token", value = "token令牌", required = false) @RequestParam(name = "token", required = false) String token) {
284-
String destroyToken = null;
285-
return ResultUtil.result(SysConf.SUCCESS, destroyToken);
271+
public String logout() {
272+
ServletRequestAttributes attribute = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
273+
HttpServletRequest request = attribute.getRequest();
274+
String token = request.getAttribute(SysConf.TOKEN).toString();
275+
redisUtil.delete(RedisConf.LOGIN_TOKEN_KEY + RedisConf.SEGMENTATION + token);
276+
return ResultUtil.result(SysConf.SUCCESS, MessageConf.OPERATION_SUCCESS);
286277
}
287278

288279
/**

mogu_admin/src/main/java/com/moxi/mogublog/admin/security/JwtAuthenticationTokenFilter.java

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,18 @@ public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
4949
@Value(value = "${tokenHeader}")
5050
private String tokenHeader;
5151

52+
/**
53+
* token过期的时间
54+
*/
5255
@Value(value = "${audience.expiresSecond}")
5356
private Long expiresSecond;
5457

58+
/**
59+
* token刷新的时间
60+
*/
61+
@Value(value = "${audience.refreshSecond}")
62+
private Long refreshSecond;
63+
5564
@Autowired
5665
private RedisUtil redisUtil;
5766

@@ -71,7 +80,7 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
7180
//请求头 'Authorization': tokenHead + token
7281
if (authHeader != null && authHeader.startsWith(tokenHead)) {
7382

74-
log.error("传递过来的token为:" + authHeader);
83+
log.error("传递过来的token为: {}", authHeader);
7584

7685
final String token = authHeader.substring(tokenHead.length());
7786

@@ -85,10 +94,10 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
8594
Date expirationDate = jwtHelper.getExpiration(token, audience.getBase64Secret());
8695
long nowMillis = System.currentTimeMillis();
8796
Date nowDate = new Date(nowMillis);
88-
// 得到两个日期相差的间隔
89-
Integer minute = DateUtils.getMinuteByTwoDay(expirationDate, nowDate);
97+
// 得到两个日期相差的间隔,秒
98+
Integer second = DateUtils.getSecondByTwoDay(expirationDate, nowDate);
9099
// 如果小于5分钟,那么更新过期时间
91-
if(minute < 5) {
100+
if(second < refreshSecond) {
92101
// 生成一个新的Token
93102
String newToken = tokenHead + jwtHelper.refreshToken(token, audience.getBase64Secret(), expiresSecond * 1000);
94103
// 生成新的token,发送到客户端
@@ -107,8 +116,9 @@ protected void doFilterInternal(HttpServletRequest request, HttpServletResponse
107116
//把adminUid存储到request中
108117
request.setAttribute(SysConf.ADMIN_UID, adminUid);
109118
request.setAttribute(SysConf.USER_NAME, username);
110-
logger.info("解析出来用户 : " + username);
111-
logger.info("解析出来的用户Uid : " + adminUid);
119+
request.setAttribute(SysConf.TOKEN, authHeader);
120+
log.info("解析出来用户: {}" ,username);
121+
log.info("解析出来的用户Uid: {}", adminUid);
112122

113123
if (username != null && SecurityContextHolder.getContext().getAuthentication() == null) {
114124

mogu_admin/src/main/resources/application.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -179,4 +179,5 @@ audience:
179179
clientId: 098f6bcd4621d373cade4e832627b4f6
180180
base64Secret: MDk4ZjZiY2Q0NjIxZDM3M2NhZGU0ZTgzMjYyN2I0ZjY=
181181
name: mogublog
182-
expiresSecond: 660 #1个小时 3600
182+
expiresSecond: 3600 #1个小时 3600
183+
refreshSecond: 300 # 刷新token的时间 5分钟

mogu_config/src/main/java/com/moxi/mogublog/config/jwt/JwtHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ public String createJWT(String userName, String adminUid, String roleName,
5858
.setSubject(userName)
5959
.setIssuer(issuer)
6060
.setAudience(audience)
61-
.signWith(signatureAlgorithm, signingKey);//签名
61+
.signWith(signatureAlgorithm, signingKey);
6262
//添加Token过期时间
6363
if (TTLMillis >= 0) {
6464
long expMillis = nowMillis + TTLMillis;

mogu_utils/src/main/java/com/moxi/mogublog/utils/DateUtils.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -391,19 +391,19 @@ public static int getDayByTwoDay(String sj1, String sj2) {
391391
}
392392

393393
/**
394-
* 得到两个日期相差的分钟
394+
* 得到两个日期相差的秒数
395395
* @param lastDate
396396
* @param date
397397
* @return
398398
*/
399-
public static int getMinuteByTwoDay(Date lastDate, Date date) {
400-
Long minute = 0L;
399+
public static int getSecondByTwoDay(Date lastDate, Date date) {
400+
Long second = 0L;
401401
try {
402-
minute = (lastDate.getTime() - date.getTime()) / (60 * 1000);
402+
second = (lastDate.getTime() - date.getTime()) / 1000;
403403
} catch (Exception e) {
404404
return 0;
405405
}
406-
return minute.intValue();
406+
return second.intValue();
407407
}
408408

409409
/**

0 commit comments

Comments
 (0)