瀏覽代碼

用户登录接口 历史token未删除问题处理

jingyuanchao 2 年之前
父節點
當前提交
3e59546c09

+ 2 - 0
soc-auth/src/main/java/com/xunmei/auth/form/LoginBody.java

@@ -17,6 +17,8 @@ public class LoginBody
      */
     private String password;
 
+    private String authCode;
+
     public String getUsername()
     {
         return username;

+ 20 - 35
soc-common/soc-common-security/src/main/java/com/xunmei/common/security/service/TokenService.java

@@ -20,12 +20,11 @@ import java.util.concurrent.TimeUnit;
 
 /**
  * token验证处理
- * 
+ *
  * @author xunmei
  */
 @Component
-public class TokenService
-{
+public class TokenService {
     @Autowired
     private RedisService redisService;
 
@@ -42,10 +41,9 @@ public class TokenService
     /**
      * 创建令牌
      */
-    public Map<String, Object> createToken(LoginUser loginUser)
-    {
-        String token = IdUtils.fastUUID();
+    public Map<String, Object> createToken(LoginUser loginUser) {
         Long userId = loginUser.getSysUser().getId();
+        String token = userId + "_" + IdUtils.fastUUID();
         String userName = loginUser.getSysUser().getName();
         loginUser.setToken(token);
         loginUser.setUserid(userId);
@@ -71,8 +69,7 @@ public class TokenService
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser()
-    {
+    public LoginUser getLoginUser() {
         return getLoginUser(ServletUtils.getRequest());
     }
 
@@ -81,8 +78,7 @@ public class TokenService
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser(HttpServletRequest request)
-    {
+    public LoginUser getLoginUser(HttpServletRequest request) {
         // 获取请求携带的令牌
         String token = SecurityUtils.getToken(request);
         return getLoginUser(token);
@@ -93,20 +89,15 @@ public class TokenService
      *
      * @return 用户信息
      */
-    public LoginUser getLoginUser(String token)
-    {
+    public LoginUser getLoginUser(String token) {
         LoginUser user = null;
-        try
-        {
-            if (StringUtils.isNotEmpty(token))
-            {
+        try {
+            if (StringUtils.isNotEmpty(token)) {
                 String userkey = JwtUtils.getUserKey(token);
                 user = redisService.getCacheObject(getTokenKey(userkey));
                 return user;
             }
-        }
-        catch (Exception e)
-        {
+        } catch (Exception e) {
         }
         return user;
     }
@@ -114,10 +105,8 @@ public class TokenService
     /**
      * 设置用户身份信息
      */
-    public void setLoginUser(LoginUser loginUser)
-    {
-        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken()))
-        {
+    public void setLoginUser(LoginUser loginUser) {
+        if (StringUtils.isNotNull(loginUser) && StringUtils.isNotEmpty(loginUser.getToken())) {
             refreshToken(loginUser);
         }
     }
@@ -125,10 +114,8 @@ public class TokenService
     /**
      * 删除用户缓存信息
      */
-    public void delLoginUser(String token)
-    {
-        if (StringUtils.isNotEmpty(token))
-        {
+    public void delLoginUser(String token) {
+        if (StringUtils.isNotEmpty(token)) {
             String userkey = JwtUtils.getUserKey(token);
             redisService.deleteObject(getTokenKey(userkey));
         }
@@ -139,12 +126,10 @@ public class TokenService
      *
      * @param loginUser
      */
-    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);
         }
     }
@@ -154,17 +139,17 @@ public class TokenService
      *
      * @param loginUser 登录信息
      */
-    public void refreshToken(LoginUser loginUser)
-    {
+    public void refreshToken(LoginUser loginUser) {
         loginUser.setLoginTime(System.currentTimeMillis());
         loginUser.setExpireTime(loginUser.getLoginTime() + expireTime * MILLIS_MINUTE);
         // 根据uuid将loginUser缓存
         String userKey = getTokenKey(loginUser.getToken());
+        //登陆后删除之前的token
+        redisService.deleteByPrefix(userKey);
         redisService.setCacheObject(userKey, loginUser, expireTime, TimeUnit.MINUTES);
     }
 
-    private String getTokenKey(String token)
-    {
+    private String getTokenKey(String token) {
         return ACCESS_TOKEN + token;
     }
 }