Sfoglia il codice sorgente

优化过期判断

zhou-hao 7 anni fa
parent
commit
d25934d1e4

+ 41 - 0
hsweb-authorization/hsweb-authorization-basic/src/main/java/org/hswebframework/web/authorization/basic/web/SessionIdUserTokenParser.java

@@ -1,5 +1,9 @@
 package org.hswebframework.web.authorization.basic.web;
 
+import org.hswebframework.web.authorization.token.UserToken;
+import org.hswebframework.web.authorization.token.UserTokenManager;
+import org.springframework.beans.factory.annotation.Autowired;
+
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpSession;
 import java.util.function.Predicate;
@@ -8,12 +12,49 @@ import java.util.function.Predicate;
  * @author zhouhao
  */
 public class SessionIdUserTokenParser implements UserTokenParser {
+
+
+    protected UserTokenManager userTokenManager;
+
+    @Autowired
+    public void setUserTokenManager(UserTokenManager userTokenManager) {
+        this.userTokenManager = userTokenManager;
+    }
+
     @Override
     public ParsedToken parseToken(HttpServletRequest request) {
 
         HttpSession session = request.getSession(false);
 
         if (session != null) {
+            String sessionId = session.getId();
+            UserToken token = userTokenManager.getByToken(sessionId);
+            long interval = session.getMaxInactiveInterval();
+            //当前已登录token已失效但是session未失效
+            if (token != null && token.isExpired()) {
+                String userId = token.getUserId();
+                return new AuthorizedToken() {
+                    @Override
+                    public String getUserId() {
+                        return userId;
+                    }
+
+                    @Override
+                    public String getToken() {
+                        return sessionId;
+                    }
+
+                    @Override
+                    public String getType() {
+                        return "session-id-default";
+                    }
+
+                    @Override
+                    public long getMaxInactiveInterval() {
+                        return interval;
+                    }
+                };
+            }
             return new ParsedToken() {
                 @Override
                 public String getToken() {