From f2530067b6cd16a87b76190cf524d2ed75bf9592 Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期六, 11 十月 2025 14:26:54 +0800
Subject: [PATCH] 集成中台及正联功能

---
 management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java |   81 +++++++++++++++++++++++++++-------------
 1 files changed, 54 insertions(+), 27 deletions(-)

diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index 33d3b0e..0847fd7 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -1,7 +1,10 @@
 package com.stylefeng.guns.modular.system.controller.system;
 
+import com.alibaba.fastjson.JSON;
+import com.baomidou.mybatisplus.mapper.EntityWrapper;
 import com.google.code.kaptcha.Constants;
 import com.stylefeng.guns.core.base.controller.BaseController;
+import com.stylefeng.guns.core.beetl.ShiroExtUtil;
 import com.stylefeng.guns.core.common.constant.Const;
 import com.stylefeng.guns.core.common.exception.InvalidKaptchaException;
 import com.stylefeng.guns.core.log.LogManager;
@@ -15,12 +18,19 @@
 import com.stylefeng.guns.core.util.KaptchaUtil;
 import com.stylefeng.guns.core.util.SinataUtil;
 import com.stylefeng.guns.core.util.ToolUtil;
+import com.stylefeng.guns.modular.system.dao.UserMapper;
+import com.stylefeng.guns.modular.system.model.Menu;
+import com.stylefeng.guns.modular.system.model.Relation;
 import com.stylefeng.guns.modular.system.model.User;
 import com.stylefeng.guns.modular.system.service.IMenuService;
+import com.stylefeng.guns.modular.system.service.IRelationService;
 import com.stylefeng.guns.modular.system.service.IUserService;
 import com.stylefeng.guns.modular.system.util.AESUtil;
 import com.stylefeng.guns.modular.system.util.AESUtils;
 import com.stylefeng.guns.modular.system.util.RedisUtil;
+import com.stylefeng.guns.modular.system.warpper.LoginUser;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.codec.binary.Base64;
 import org.apache.shiro.authc.SimpleAuthenticationInfo;
 import org.apache.shiro.authc.UsernamePasswordToken;
 import org.apache.shiro.subject.Subject;
@@ -33,7 +43,11 @@
 import org.springframework.web.bind.annotation.RequestMethod;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpSession;
+import java.io.UnsupportedEncodingException;
 import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.stream.Collectors;
 
 import static com.stylefeng.guns.core.support.HttpKit.getIp;
 
@@ -43,6 +57,7 @@
  * @author fengshuonan
  * @Date 2017年1月10日 下午8:25:24
  */
+@Slf4j
 @Controller
 public class LoginController extends BaseController {
 
@@ -54,7 +69,19 @@
     @Autowired
     private RedisUtil redisUtil;
 
+    @Autowired
+    private IShiro shiro;
+
+    @Autowired
+    private UserMapper userMapper;
+
     private Map<String, Integer> loginFailures = new HashMap<>();
+
+    @Autowired
+    private IRelationService relationService;
+
+    @Autowired
+    private ShiroExtUtil shiroExtUtil;
 
 
 
@@ -63,32 +90,34 @@
      * 跳转到主页
      */
     @RequestMapping(value = "/", method = RequestMethod.GET)
-    public String index(Model model) {
+    public String index(Model model, HttpServletRequest request) throws UnsupportedEncodingException {
+        //session中解析用户数据
+        HttpSession session = request.getSession();
+        String onconParam = edu.yale.its.tp.cas.client.Util.getOnconParam(session);
+        onconParam = new String(Base64.decodeBase64(onconParam), "UTF-8");
+        LoginUser loginUser = JSON.parseObject(onconParam, LoginUser.class);
+        log.info("session解析结果:" + JSON.toJSONString(loginUser));
         //获取菜单列表
-        List<Integer> roleList = ShiroKit.getUser().getRoleList();
-        if (roleList == null || roleList.size() == 0) {
-            ShiroKit.getSubject().logout();
-            model.addAttribute("tips", "该用户没有角色,无法登陆");
-            return "/login.html";
+        User user = userMapper.getByAccount(loginUser.getImUser());
+        if (null == user) {
+            log.info("用户不存在");
+            return null;
         }
+        ShiroUser shiroUser = shiro.shiroUser(user);
+        List<Integer> roleList = shiroUser.getRoleList();
+        if (roleList == null || roleList.size() == 0) {
+            roleList.add(0);
+        }
+
+        List<Relation> relations = relationService.selectList(new EntityWrapper<Relation>().in("roleid", roleList));
+        Set<Long> collect = relations.stream().map(Relation::getMenuid).collect(Collectors.toSet());
+        List<Menu> menuList = menuService.selectBatchIds(collect);
         List<MenuNode> menus = menuService.getMenusByRoleIds(roleList);
         List<MenuNode> titles = MenuNode.buildTitle(menus);
         titles = ApiMenuFilter.build(titles);
-
-
-        Integer id = ShiroKit.getUser().getId();
-        User user = userService.selectById(id);
-        if (SinataUtil.isEmpty(user)){
-            ShiroKit.getSubject().logout();
-            model.addAttribute("tips", "请重新登录");
-            return "/login.html";
-        }
-        //设置上级ID
-        if (SinataUtil.isNotEmpty(user.getObjectId())){
-            ShiroKit.getUser().setObjectId(user.getObjectId());
-        }
-        //设置角色
-        ShiroKit.getUser().setRoleType(user.getRoleType());
+        shiroUser.setMenuIds(menuList.stream().map(Menu::getUrl).collect(Collectors.toList()));
+        shiroUser.setRoleType(user.getRoleType());
+        shiroUser.setObjectId(user.getObjectId());
 
         model.addAttribute("titles", titles);
 
@@ -101,6 +130,7 @@
                 null == user.getPassWordUpdate()
                         || user.getPassWordUpdate().getTime() + 7776000000L <= System.currentTimeMillis()
                         ? "您的密码已经90天未更换了,请及时更换密码!!!" : "");
+        redisUtil.setStrValue(loginUser.getOnconUUID(), JSON.toJSONString(shiroUser), 600);
         return "/index.html";
     }
 
@@ -110,7 +140,7 @@
     @RequestMapping(value = "/login", method = RequestMethod.GET)
     public String login(Model model) {
         model.addAttribute("number",0);
-        if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) {
+        if (ShiroKit.isAuthenticated() || shiroExtUtil.getUser() != null) {
             return REDIRECT + "/";
         } else {
             return "/login.html";
@@ -183,7 +213,7 @@
         // 登录成功,错误次数值改0
         loginFailures.put(username, 0);
 
-        ShiroUser shiroUser = ShiroKit.getUser();
+        ShiroUser shiroUser = shiroExtUtil.getUser();
         super.getSession().setAttribute("shiroUser", shiroUser);
         super.getSession().setAttribute("username", shiroUser.getAccount());
 
@@ -198,9 +228,6 @@
      */
     @RequestMapping(value = "/logout", method = RequestMethod.GET)
     public String logOut() {
-        LogManager.me().executeLog(LogTaskFactory.exitLog(ShiroKit.getUser().getId(), getIp()));
-        ShiroKit.getSubject().logout();
-        deleteAllCookie();
-        return REDIRECT + "/login";
+        return REDIRECT + "/";
     }
 }

--
Gitblit v1.7.1