From ead1136e3136d52f687ffb6ed02d7f30dca1a4f8 Mon Sep 17 00:00:00 2001 From: 疯狂的狮子li <15040126243@163.com> Date: 星期五, 28 五月 2021 14:24:45 +0800 Subject: [PATCH] add 增加 security 权限框架 @Async 异步注解配置 --- ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java | 126 +++++++++++++++++------------------------- 1 files changed, 51 insertions(+), 75 deletions(-) diff --git a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java index 072aa5e..0db777b 100644 --- a/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java +++ b/ruoyi-framework/src/main/java/com/ruoyi/framework/web/service/TokenService.java @@ -1,44 +1,34 @@ package com.ruoyi.framework.web.service; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.TimeUnit; -import javax.servlet.http.HttpServletRequest; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Value; -import org.springframework.stereotype.Component; +import cn.hutool.core.lang.Validator; +import cn.hutool.core.util.IdUtil; +import cn.hutool.http.useragent.UserAgent; +import cn.hutool.http.useragent.UserAgentUtil; import com.ruoyi.common.constant.Constants; import com.ruoyi.common.core.domain.model.LoginUser; import com.ruoyi.common.core.redis.RedisCache; import com.ruoyi.common.utils.ServletUtils; -import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.ip.AddressUtils; import com.ruoyi.common.utils.ip.IpUtils; -import com.ruoyi.common.utils.uuid.IdUtils; -import eu.bitwalker.useragentutils.UserAgent; +import com.ruoyi.framework.config.properties.TokenProperties; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + +import javax.servlet.http.HttpServletRequest; +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.TimeUnit; /** * token楠岃瘉澶勭悊 - * - * @author ruoyi + * + * @author Lion Li */ @Component -public class TokenService -{ - // 浠ょ墝鑷畾涔夋爣璇� - @Value("${token.header}") - private String header; - - // 浠ょ墝绉橀挜 - @Value("${token.secret}") - private String secret; - - // 浠ょ墝鏈夋晥鏈燂紙榛樿30鍒嗛挓锛� - @Value("${token.expireTime}") - private int expireTime; +public class TokenService { protected static final long MILLIS_SECOND = 1000; @@ -49,17 +39,18 @@ @Autowired private RedisCache redisCache; + @Autowired + private TokenProperties tokenProperties; + /** * 鑾峰彇鐢ㄦ埛韬唤淇℃伅 - * + * * @return 鐢ㄦ埛淇℃伅 */ - public LoginUser getLoginUser(HttpServletRequest request) - { + public LoginUser getLoginUser(HttpServletRequest request) { // 鑾峰彇璇锋眰鎼哄甫鐨勪护鐗� String token = getToken(request); - if (StringUtils.isNotEmpty(token)) - { + if (Validator.isNotEmpty(token)) { Claims claims = parseToken(token); // 瑙f瀽瀵瑰簲鐨勬潈闄愪互鍙婄敤鎴蜂俊鎭� String uuid = (String) claims.get(Constants.LOGIN_USER_KEY); @@ -73,10 +64,8 @@ /** * 璁剧疆鐢ㄦ埛韬唤淇℃伅 */ - public void setLoginUser(LoginUser loginUser) - { - if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) - { + public void setLoginUser(LoginUser loginUser) { + if (Validator.isNotNull(loginUser) && Validator.isNotEmpty(loginUser.getToken())) { refreshToken(loginUser); } } @@ -84,10 +73,8 @@ /** * 鍒犻櫎鐢ㄦ埛韬唤淇℃伅 */ - public void delLoginUser(String token) - { - if (StringUtils.isNotEmpty(token)) - { + public void delLoginUser(String token) { + if (Validator.isNotEmpty(token)) { String userKey = getTokenKey(token); redisCache.deleteObject(userKey); } @@ -95,13 +82,12 @@ /** * 鍒涘缓浠ょ墝 - * + * * @param loginUser 鐢ㄦ埛淇℃伅 * @return 浠ょ墝 */ - public String createToken(LoginUser loginUser) - { - String token = IdUtils.fastUUID(); + public String createToken(LoginUser loginUser) { + String token = IdUtil.fastUUID(); loginUser.setToken(token); setUserAgent(loginUser); refreshToken(loginUser); @@ -113,60 +99,55 @@ /** * 楠岃瘉浠ょ墝鏈夋晥鏈燂紝鐩稿樊涓嶈冻20鍒嗛挓锛岃嚜鍔ㄥ埛鏂扮紦瀛� - * - * @param token 浠ょ墝 + * + * @param loginUser * @return 浠ょ墝 */ - public void verifyToken(LoginUser loginUser) - { + public void verifyToken(LoginUser loginUser) { long expireTime = loginUser.getExpireTime(); long currentTime = System.currentTimeMillis(); - if (expireTime - currentTime <= MILLIS_MINUTE_TEN) - { + if (expireTime - currentTime <= MILLIS_MINUTE_TEN) { refreshToken(loginUser); } } /** * 鍒锋柊浠ょ墝鏈夋晥鏈� - * + * * @param loginUser 鐧诲綍淇℃伅 */ - public void refreshToken(LoginUser loginUser) - { + public void refreshToken(LoginUser loginUser) { loginUser.setLoginTime(System.currentTimeMillis()); - loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE); + loginUser.setExpireTime(loginUser.getLoginTime() + tokenProperties.getExpireTime() * MILLIS_MINUTE); // 鏍规嵁uuid灏唋oginUser缂撳瓨 String userKey = getTokenKey(loginUser.getToken()); - redisCache.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES); + redisCache.setCacheObject(userKey, loginUser, tokenProperties.getExpireTime(), TimeUnit.MINUTES); } - + /** * 璁剧疆鐢ㄦ埛浠g悊淇℃伅 - * + * * @param loginUser 鐧诲綍淇℃伅 */ - public void setUserAgent(LoginUser loginUser) - { - UserAgent userAgent = UserAgent.parseUserAgentString(ServletUtils.getRequest().getHeader("User-Agent")); + public void setUserAgent(LoginUser loginUser) { + UserAgent userAgent = UserAgentUtil.parse(ServletUtils.getRequest().getHeader("User-Agent")); String ip = IpUtils.getIpAddr(ServletUtils.getRequest()); loginUser.setIpaddr(ip); loginUser.setLoginLocation(AddressUtils.getRealAddressByIP(ip)); loginUser.setBrowser(userAgent.getBrowser().getName()); - loginUser.setOs(userAgent.getOperatingSystem().getName()); + loginUser.setOs(userAgent.getOs().getName()); } - + /** * 浠庢暟鎹0鏄庣敓鎴愪护鐗� * * @param claims 鏁版嵁澹版槑 * @return 浠ょ墝 */ - private String createToken(Map<String, Object> claims) - { + private String createToken(Map<String, Object> claims) { String token = Jwts.builder() .setClaims(claims) - .signWith(SignatureAlgorithm.HS512, secret).compact(); + .signWith(SignatureAlgorithm.HS512, tokenProperties.getSecret()).compact(); return token; } @@ -176,10 +157,9 @@ * @param token 浠ょ墝 * @return 鏁版嵁澹版槑 */ - private Claims parseToken(String token) - { + private Claims parseToken(String token) { return Jwts.parser() - .setSigningKey(secret) + .setSigningKey(tokenProperties.getSecret()) .parseClaimsJws(token) .getBody(); } @@ -190,8 +170,7 @@ * @param token 浠ょ墝 * @return 鐢ㄦ埛鍚� */ - public String getUsernameFromToken(String token) - { + public String getUsernameFromToken(String token) { Claims claims = parseToken(token); return claims.getSubject(); } @@ -202,18 +181,15 @@ * @param request * @return token */ - private String getToken(HttpServletRequest request) - { - String token = request.getHeader(header); - if (StringUtils.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) - { + private String getToken(HttpServletRequest request) { + String token = request.getHeader(tokenProperties.getHeader()); + if (Validator.isNotEmpty(token) && token.startsWith(Constants.TOKEN_PREFIX)) { token = token.replace(Constants.TOKEN_PREFIX, ""); } return token; } - private String getTokenKey(String uuid) - { + private String getTokenKey(String uuid) { return Constants.LOGIN_TOKEN_KEY + uuid; } } -- Gitblit v1.9.3