From 25cf266e99714ac5d428e66b40ce272325c91dd8 Mon Sep 17 00:00:00 2001 From: Pu Zhibing <393733352@qq.com> Date: 星期六, 14 六月 2025 15:01:11 +0800 Subject: [PATCH] 修改管理后台账号和共享session等 屏蔽除出租车外的其他模块 --- ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java | 422 +++++++++++++++++++++++++--------------------------- 1 files changed, 203 insertions(+), 219 deletions(-) diff --git a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java index 19c1b21..88c08b7 100644 --- a/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java +++ b/ManagementQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java @@ -1,46 +1,52 @@ package com.stylefeng.guns.modular.system.controller.system; +import cn.hutool.http.HttpUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; 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.exception.InvalidKaptchaException; import com.stylefeng.guns.core.log.LogManager; import com.stylefeng.guns.core.log.factory.LogTaskFactory; import com.stylefeng.guns.core.node.MenuNode; import com.stylefeng.guns.core.shiro.ShiroKit; import com.stylefeng.guns.core.shiro.ShiroUser; +import com.stylefeng.guns.core.shiro.factory.IShiro; import com.stylefeng.guns.core.util.ApiMenuFilter; 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.cloudPayment.example.CusApplicationExample; -import com.stylefeng.guns.modular.cloudPayment.example.SettleAcctExample; -import com.stylefeng.guns.modular.system.model.TEnterpriseWithdrawal; +import com.stylefeng.guns.modular.system.dao.UserMapper; import com.stylefeng.guns.modular.system.model.User; import com.stylefeng.guns.modular.system.service.IMenuService; import com.stylefeng.guns.modular.system.service.ITEnterpriseWithdrawalService; import com.stylefeng.guns.modular.system.service.IUserService; import com.stylefeng.guns.modular.system.util.HttpRequestUtil; import com.stylefeng.guns.modular.system.util.PushURL; -import com.stylefeng.guns.modular.system.util.RedisUtil; import com.stylefeng.guns.modular.system.util.ResultUtil; -import com.unionpay.upyzt.resp.CusApplicationSmsCodeResp; -import com.unionpay.upyzt.resp.MchApplicationStoreResp; -import com.unionpay.upyzt.resp.SettleAcctResp; +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.UsernamePasswordToken; import org.apache.shiro.subject.Subject; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.redis.core.RedisTemplate; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.context.request.RequestContextHolder; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; +import java.io.UnsupportedEncodingException; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; +import java.util.stream.Collectors; import static com.stylefeng.guns.core.support.HttpKit.getIp; @@ -50,222 +56,200 @@ * @author fengshuonan * @Date 2017年1月10日 下午8:25:24 */ +@Slf4j @Controller public class LoginController extends BaseController { - - @Autowired - private IMenuService menuService; - - @Autowired - private IUserService userService; - - @Autowired - private RedisUtil redisUtil; - - private Map<String, Long> loginTime = new HashMap<>(); - - private Map<String, Integer> loginFailures = new HashMap<>(); - - @Resource - private ITEnterpriseWithdrawalService enterpriseWithdrawalService; - - /** - * 跳转到主页 - */ - @RequestMapping(value = "/", method = RequestMethod.GET) - public String index(Model model) { - //获取菜单列表 - List<Integer> roleList = ShiroKit.getUser().getRoleList(); - if (roleList == null || roleList.size() == 0) { - ShiroKit.getSubject().logout(); - model.addAttribute("tips", "该用户没有角色,无法登陆"); - return "/login.html"; - } - 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()); - - model.addAttribute("titles", titles); - - //获取用户头像 - String avatar = user.getAvatar(); - model.addAttribute("avatar", avatar); - model.addAttribute("userName", user.getName()); - model.addAttribute("type", 0); - - - return "/index.html"; - } - - /** - * 跳转到登录页面 - */ - @RequestMapping(value = "/login", method = RequestMethod.GET) - public String login() { - if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) { - return REDIRECT + "/"; - } else { - return "/login.html"; - } - } - - /** - * 点击登录执行的动作 - */ - @RequestMapping(value = "/login", method = RequestMethod.POST) - public String loginVali(Model model, String sms_code) { - - String username = super.getPara("username").trim(); - String password = super.getPara("password").trim(); - String remember = super.getPara("remember"); - - - Integer f = loginFailures.get(username); - f = f == null ? 0 : f; - Long t = loginTime.get(username); - t = null == t ? 0 : t; - if(System.currentTimeMillis() - t > (30 * 60 * 1000)){ - loginFailures.put(username, f = 1); - loginTime.put(username, System.currentTimeMillis()); - }else{ - f++; - loginFailures.put(username, f); - } + + @Autowired + private IMenuService menuService; + + @Autowired + private IUserService userService; + + @Autowired + private RedisTemplate redisTemplate; + + @Autowired + private IShiro shiro; + + @Autowired + private UserMapper userMapper; + + + private Map<String, Long> loginTime = new HashMap<>(); + + private Map<String, Integer> loginFailures = new HashMap<>(); + + @Resource + private ITEnterpriseWithdrawalService enterpriseWithdrawalService; + + + /** + * 跳转到主页 + */ + @RequestMapping(value = "/", method = RequestMethod.GET) + public String index(Model model, HttpServletRequest request) throws UnsupportedEncodingException { + //session中解析用户数据 + //设置共享session + HttpSession session = (HttpSession) redisTemplate.opsForValue().get(request.getSession().getId()); + if (null != session) { + session = request.getSession(); + redisTemplate.opsForValue().set(request.getSession().getId(), session, 2, TimeUnit.DAYS); + } + 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("登录账号: " + JSON.toJSONString(loginUser)); + + //获取菜单列表 + User user = userMapper.getByAccount(loginUser.getImUser()); + if (null == user) { + logOut(); + } + ShiroUser shiroUser = shiro.shiroUser(user); + List<Integer> roleList = shiroUser.getRoleList(); + if (roleList == null || roleList.size() == 0) { + roleList.add(0); + } + + List<MenuNode> menus = menuService.getMenusByRoleIds(roleList); + List<MenuNode> titles = MenuNode.buildTitle(menus); + titles = ApiMenuFilter.build(titles); + shiroUser.setMenuIds(titles.stream().map(MenuNode::getUrl).collect(Collectors.toList())); + + + model.addAttribute("titles", titles); + //获取用户头像 + String avatar = user.getAvatar(); + model.addAttribute("avatar", avatar); + model.addAttribute("userName", user.getName()); + model.addAttribute("type", 0); + String sessionId = RequestContextHolder.currentRequestAttributes().getSessionId(); + ShiroExtUtil.map.put(sessionId, shiroUser); + return "/index.html"; + } + + /** + * 退出登录 + */ + @RequestMapping(value = "/logout", method = RequestMethod.GET) + public String logOut() { + HttpUtil.get("https://testsso1.teamshub.com/logout?logouturl=https%3A%2F%2Fsso.teamshub.com%2Flogout%3F%0Alogoutat%3Dhttp%253A%252F%252F127.0.0.1%253A8010%252F"); + return REDIRECT + "/"; + } + + /** + * 跳转到登录页面 + */ + @RequestMapping(value = "/login", method = RequestMethod.GET) + public String login() { + if (ShiroKit.isAuthenticated() || ShiroKit.getUser() != null) { + return REDIRECT + "/"; + } else { + return "/login.html"; + } + } + + /** + * 点击登录执行的动作 + */ + @RequestMapping(value = "/login", method = RequestMethod.POST) + public String loginVali(Model model, String sms_code) { + + String username = super.getPara("username").trim(); + String password = super.getPara("password").trim(); + String remember = super.getPara("remember"); + + Integer f = loginFailures.get(username); + f = f == null ? 0 : f; + Long t = loginTime.get(username); + t = null == t ? 0 : t; + if (System.currentTimeMillis() - t > (30 * 60 * 1000)) { + loginFailures.put(username, f = 1); + loginTime.put(username, System.currentTimeMillis()); + } else { + f++; + loginFailures.put(username, f); + } // if(f >= 5 && (System.currentTimeMillis() - t) <= (30 * 60 * 1000)){ // model.addAttribute("tips", "登录次数过多,请等30分钟再试!"); // return "/login.html"; // } - - //验证短信验证码 - if(ToolUtil.isEmpty(sms_code)){ - model.addAttribute("tips", "无效的验证码"); - return "/login.html"; - } - User user = userService.getByAccount(username); - if(!"aaaa".equals(sms_code)){ - String value = redisUtil.getValue(user.getPhone()); - if(ToolUtil.isEmpty(value) || !sms_code.equals(value)){ - model.addAttribute("tips", "无效的验证码"); - return "/login.html"; - } - } - - - //验证验证码是否正确 - if (KaptchaUtil.getKaptchaOnOff()) { - String kaptcha = super.getPara("kaptcha").trim(); - String code = (String) super.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY); - if (ToolUtil.isEmpty(kaptcha) || !kaptcha.equalsIgnoreCase(code)) { - throw new InvalidKaptchaException(); - } - } - - Subject currentUser = ShiroKit.getSubject(); - UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray()); - - if ("on".equals(remember)) { - token.setRememberMe(true); - } else { - token.setRememberMe(false); - } - - currentUser.login(token); - - ShiroUser shiroUser = ShiroKit.getUser(); - super.getSession().setAttribute("shiroUser", shiroUser); - super.getSession().setAttribute("username", shiroUser.getAccount()); - - LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); - - ShiroKit.getSession().setAttribute("sessionFlag", true); - - return REDIRECT + "/"; - } - - /** - * 退出登录 - */ - @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"; - } - - - - /** - * 发送短信验证码 - * @param username - * @return - */ - @ResponseBody - @RequestMapping(value = "/base/sendSMSCode", method = RequestMethod.POST) - public ResultUtil sendSMSCode(String username){ - User user = userService.getByAccount(username); - if(null == user){ - return ResultUtil.error("无效的账号"); - } - if(ToolUtil.isEmpty(user.getPhone())){ - return ResultUtil.error("请联系管理员完善电话号码"); - } - Map<String,String> map = new HashMap<>(); - map.put("phone", user.getPhone()); - map.put("type", String.valueOf(1)); - String result = HttpRequestUtil.postRequest(PushURL.send_sms_code, map); - JSONObject jsonObject = JSON.parseObject(result); - if(200 == jsonObject.getInteger("code")){ - return ResultUtil.success(); - } - return ResultUtil.error(jsonObject.getString("msg")); - } - - - @ResponseBody - @RequestMapping(value = "/base/sendSMSCodeOne", method = RequestMethod.POST) - public ResultUtil sendSMSCodeOne(String username){ - if(ToolUtil.isEmpty(username)){ - return ResultUtil.error("请完善电话号码"); - } - try { - CusApplicationSmsCodeResp cusApplicationSmsCodeResp1 = CusApplicationExample.smsCode(username); - System.out.println("!!!!!"+cusApplicationSmsCodeResp1.toString()+"!!!!!"); - System.out.println("!!!!!"+cusApplicationSmsCodeResp1+"!!!!!"); - return ResultUtil.success(); - }catch (Exception e){ - e.printStackTrace(); - return ResultUtil.error(e.getMessage()); - } - - } - @ResponseBody - @RequestMapping(value = "/base/verify", method = RequestMethod.POST) - public ResultUtil verify(int id,Integer money){ - try { - TEnterpriseWithdrawal tEnterpriseWithdrawal = enterpriseWithdrawalService.selectById(id); - SettleAcctResp settleAcctResp = SettleAcctExample.validateBySettleAcctId(tEnterpriseWithdrawal.getSettleAcctId(), money * 100); - return ResultUtil.success(settleAcctResp); - }catch (Exception e){ - e.printStackTrace(); - return ResultUtil.error("发送失败"); - } - - } + + //验证短信验证码 + if (ToolUtil.isEmpty(sms_code)) { + model.addAttribute("tips", "无效的验证码"); + return "/login.html"; + } + User user = userService.getByAccount(username); + if (!"aaaa".equals(sms_code)) { + String value = redisTemplate.opsForValue().get(user.getPhone()).toString(); + if (ToolUtil.isEmpty(value) || !sms_code.equals(value)) { + model.addAttribute("tips", "无效的验证码"); + return "/login.html"; + } + } + + + //验证验证码是否正确 + if (KaptchaUtil.getKaptchaOnOff()) { + String kaptcha = super.getPara("kaptcha").trim(); + String code = (String) super.getSession().getAttribute(Constants.KAPTCHA_SESSION_KEY); + if (ToolUtil.isEmpty(kaptcha) || !kaptcha.equalsIgnoreCase(code)) { + throw new InvalidKaptchaException(); + } + } + + Subject currentUser = ShiroKit.getSubject(); + UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray()); + + if ("on".equals(remember)) { + token.setRememberMe(true); + } else { + token.setRememberMe(false); + } + + currentUser.login(token); + + ShiroUser shiroUser = ShiroKit.getUser(); + super.getSession().setAttribute("shiroUser", shiroUser); + super.getSession().setAttribute("username", shiroUser.getAccount()); + + LogManager.me().executeLog(LogTaskFactory.loginLog(shiroUser.getId(), getIp())); + + ShiroKit.getSession().setAttribute("sessionFlag", true); + + return REDIRECT + "/"; + } + + + /** + * 发送短信验证码 + * + * @param username + * @return + */ + @ResponseBody + @RequestMapping(value = "/base/sendSMSCode", method = RequestMethod.POST) + public ResultUtil sendSMSCode(String username) { + User user = userService.getByAccount(username); + if (null == user) { + return ResultUtil.error("无效的账号"); + } + if (ToolUtil.isEmpty(user.getPhone())) { + return ResultUtil.error("请联系管理员完善电话号码"); + } + Map<String, String> map = new HashMap<>(); + map.put("phone", user.getPhone()); + map.put("type", String.valueOf(1)); + String result = HttpRequestUtil.postRequest(PushURL.send_sms_code, map); + JSONObject jsonObject = JSON.parseObject(result); + if (200 == jsonObject.getInteger("code")) { + return ResultUtil.success(); + } + return ResultUtil.error(jsonObject.getString("msg")); + } + + } -- Gitblit v1.7.1