Răsfoiți Sursa

钉钉登录和jwt登录 记录日志和会话

vincent 3 ani în urmă
părinte
comite
44bc4ead8a

+ 8 - 2
maxkey-authentications/maxkey-authentication-social/src/main/java/org/maxkey/authn/support/socialsignon/SocialSignOnEndpoint.java

@@ -42,10 +42,13 @@ import org.maxkey.authn.support.jwt.JwtLoginService;
 import org.maxkey.authn.support.socialsignon.service.SocialsAssociate;
 import org.maxkey.constants.ConstantsLoginType;
 import org.maxkey.constants.ConstantsPasswordSetType;
+import org.maxkey.entity.HistoryLogs;
 import org.maxkey.entity.SocialsProvider;
 import org.maxkey.entity.UserInfo;
+import org.maxkey.persistence.db.LoginHistoryService;
 import org.maxkey.persistence.redis.RedisConnection;
 import org.maxkey.persistence.redis.RedisConnectionFactory;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.UserInfoService;
 import org.maxkey.util.StringUtils;
 import org.maxkey.web.WebContext;
@@ -94,6 +97,9 @@ public class SocialSignOnEndpoint extends AbstractSocialSignOnEndpoint
     @Autowired
     RedisConnectionFactory redisConnectionFactory;
 
+    @Autowired
+    LoginHistoryService loginHistoryService;
+
 
     final static Logger _logger = LoggerFactory.getLogger(SocialSignOnEndpoint.class);
 
@@ -251,7 +257,7 @@ public class SocialSignOnEndpoint extends AbstractSocialSignOnEndpoint
      * @return
      */
     @RequestMapping(value = {"/callback/{provider}"}, method = RequestMethod.GET)
-    public ModelAndView callbackDingTalk(@PathVariable String provider)
+    public ModelAndView callbackDingTalk(@PathVariable String provider,HttpServletRequest request)
     {
         // 对 callbackUrl 进行处理
         String curl = callbackUrl;
@@ -353,7 +359,7 @@ public class SocialSignOnEndpoint extends AbstractSocialSignOnEndpoint
                 redisConnection.close();
                 _logger.debug("token >>>" + token);
 
-
+                loginHistoryService.login(userInfo,WebContext.genId(), ConstantsLoginType.JWT,"","",provider,"","",1);
                 // TODO  整合前端的地址
                 return WebContext.redirect(curl + ticket);
             } else

+ 19 - 7
maxkey-webs/maxkey-web-maxkey/src/main/java/org/maxkey/web/contorller/ThirdLoginController.java

@@ -16,14 +16,17 @@ import org.maxkey.authn.support.jwt.JwtLoginService;
 import org.maxkey.authn.support.socialsignon.service.SocialSignOnProviderService;
 import org.maxkey.authn.support.socialsignon.service.SocialsAssociateService;
 import org.maxkey.authz.cas.endpoint.ticket.generator.DefaultUniqueTicketIdGenerator;
-import org.maxkey.entity.Organizations;
-import org.maxkey.entity.SocialsProvider;
-import org.maxkey.entity.UserInfo;
+import org.maxkey.constants.ConstantsLoginType;
+import org.maxkey.entity.*;
+import org.maxkey.persistence.db.LoginHistoryService;
 import org.maxkey.persistence.redis.RedisConnection;
 import org.maxkey.persistence.redis.RedisConnectionFactory;
+import org.maxkey.persistence.service.HistorySystemLogsService;
 import org.maxkey.persistence.service.OrganizationsService;
 import org.maxkey.persistence.service.UserInfoService;
+import org.maxkey.util.JsonUtils;
 import org.maxkey.util.RetCode;
+import org.maxkey.web.WebContext;
 import org.maxkey.web.component.TreeNode;
 import org.maxkey.web.component.TreeNodeList;
 import org.maxkey.web.endpoint.LoginEndpoint;
@@ -79,6 +82,9 @@ public class ThirdLoginController
     @Autowired
     RedisConnectionFactory redisConnectionFactory;
 
+    @Autowired
+    LoginHistoryService loginHistoryService;
+
 
     /**
      * init login
@@ -87,7 +93,7 @@ public class ThirdLoginController
      */
     @ApiOperation(value = "登录接口", notes = "用户登录地址", httpMethod = "GET")
     @RequestMapping(value = {"/login"})
-    public RetResult login(@RequestParam("username") String username, @RequestParam("password") String password)
+    public RetResult login(@RequestParam("username") String username, @RequestParam("password") String password, HttpServletRequest request)
     {
         RetResult result = new RetResult();
         Map<String, Object> data = new HashMap<String, Object>();
@@ -118,6 +124,9 @@ public class ThirdLoginController
             _logger.debug("token >>>" + token);
             result.setData(data);
             result.setCode(RetCode.SUCCESS);
+            // 登录
+            loginHistoryService.login(userInfo, WebContext.genId(), ConstantsLoginType.JWT, "", "", "", "", "", 1);
+
             return result;
         }
 
@@ -145,13 +154,15 @@ public class ThirdLoginController
         // 1天
         RedisConnection redisConnection = redisConnectionFactory.getConnection();
         String userInfo = redisConnection.get(token);
+        if (StringUtils.isEmpty(userInfo))
+        {
+            return new RetResult().setMsg("请求失败,token无效").setData(null).setCode(RetCode.SUCCESS);
+        }
         Jackson2JsonRedisSerializer<UserInfo> jackson2JsonRedisSerializer = new Jackson2JsonRedisSerializer<UserInfo>(UserInfo.class);
         UserInfo user = JSONObject.parseObject(userInfo, UserInfo.class);
         result.put("token", token);
         result.put("userInfo", user);
-        if(user==null){
-            return new RetResult().setMsg("请求失败,token无效").setData(null).setCode(RetCode.SUCCESS);
-        }
+
         redisConnection.setex(ticket, 60 * 60 * 24 * 1, result.toString());
         redisConnection.close();
         result = new JSONObject();
@@ -179,6 +190,7 @@ public class ThirdLoginController
         JSONObject userObject = JSONObject.parseObject(userInfo);
         result.put("userInfo", JSONObject.toJSONString(userObject.get("userInfo")));
         result.put("token", userObject.getString("token"));
+        result.put("sessionId", request.getSession().getId());
         redisConnection.close();
         return new RetResult().setMsg("请求成功").setData(result).setCode(RetCode.SUCCESS);
     }

+ 15 - 0
maxkey-webs/maxkey-web-mgt/src/main/java/org/maxkey/web/historys/contorller/LoginSessionController.java

@@ -26,6 +26,8 @@ import org.maxkey.entity.HistoryLogin;
 import org.maxkey.entity.UserInfo;
 import org.maxkey.persistence.db.LoginHistoryService;
 import org.maxkey.persistence.db.LoginService;
+import org.maxkey.persistence.redis.RedisConnection;
+import org.maxkey.persistence.redis.RedisConnectionFactory;
 import org.maxkey.persistence.service.HistoryLoginService;
 import org.maxkey.util.DateUtils;
 import org.maxkey.util.StringUtils;
@@ -67,6 +69,9 @@ public class LoginSessionController {
     
     @Autowired
     OnlineTicketServices onlineTicketServices;
+
+    @Autowired
+    RedisConnectionFactory redisConnectionFactory;
     
     @RequestMapping(value = { "/sessionList" })
     public String authList() {
@@ -109,6 +114,16 @@ public class LoginSessionController {
                 loginService.setLastLogoffInfo(userInfo);
                 loginHistoryService.logoff(lastLogoffTime, sessionId);
                 onlineTicketServices.remove("OT-" + sessionId);
+
+                // 清除redis中的token 和 ticket
+                RedisConnection redisConnection = redisConnectionFactory.getConnection();
+                String token = redisConnection.get(userInfo.getId());
+                _logger.trace("token is  {} ",token);
+                if(StringUtils.isNotEmpty(token)){
+                    redisConnection.delete(userInfo.getId());
+                    redisConnection.delete(token);
+                }
+
             }
             isTerminated = true;
         }catch(Exception e) {