From 61b2d479bf4887902d21c5c99d9b65bf9cc8d27a Mon Sep 17 00:00:00 2001
From: Pu Zhibing <393733352@qq.com>
Date: 星期二, 14 十月 2025 11:56:08 +0800
Subject: [PATCH] 提交代码
---
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java | 83 ++++++++++++++++++++++++++++-------------
1 files changed, 56 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 1c19d87..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,11 +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;
@@ -32,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;
@@ -42,6 +57,7 @@
* @author fengshuonan
* @Date 2017年1月10日 下午8:25:24
*/
+@Slf4j
@Controller
public class LoginController extends BaseController {
@@ -53,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;
@@ -62,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);
@@ -100,6 +130,7 @@
null == user.getPassWordUpdate()
|| user.getPassWordUpdate().getTime() + 7776000000L <= System.currentTimeMillis()
? "您的密码已经90天未更换了,请及时更换密码!!!" : "");
+ redisUtil.setStrValue(loginUser.getOnconUUID(), JSON.toJSONString(shiroUser), 600);
return "/index.html";
}
@@ -109,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";
@@ -121,6 +152,7 @@
*/
@RequestMapping(value = "/login", method = RequestMethod.POST)
public String loginVali(String username, String password,String sms_code, String remember, Model model, HttpServletRequest request) {
+ password = AESUtil.decrypt(password);
Integer f = loginFailures.get(username);
f = f == null ? 0 : f;
// 校验账号,密码是否正确,如果错误,对次数进行加1
@@ -181,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());
@@ -196,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