From 98e09c3125b33d0b7f35ba94f2028a18fac7c92d Mon Sep 17 00:00:00 2001 From: hujl Date: Thu, 17 Nov 2022 17:09:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BD=9B=E5=B1=B1=E9=AA=8C=E8=AF=81=E7=A0=81?= =?UTF-8?q?=E6=9B=B4=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- power-admin/pom.xml | 41 +++- .../java/com/manage/bean/LoginVoRedis.java | 51 ++++ .../controller/CheckcodeController.java | 65 ++++++ .../com/manage/controller/FontController.java | 14 +- .../com/manage/controller/JedisPoolUtil.java | 69 ++++++ .../manage/controller/LoginController.java | 74 ++++-- .../java/com/manage/controller/SsoLogin.java | 1 - .../com/manage/controller/UserController.java | 2 +- .../src/main/resources/redis.properties | 16 ++ .../webapp/WEB-INF/views/loginDir/login.jsp | 221 +++++++++++++----- .../WEB-INF/views/roleDir/roleNotDown.jsp | 80 +++---- .../src/main/webapp/static/css/login.css | 13 ++ .../main/webapp/static/img/login/login_bg.png | Bin 0 -> 507894 bytes power-admin/src/main/webapp/static/js/dept.js | 152 ++++++------ .../src/main/webapp/static/js/login.js | 213 ++++++++++------- .../main/webapp/static/js/updatePassword.js | 6 + .../resources/config/gennerator.properties | 2 +- .../resources/mapper/Power_Sys_DictMapper.xml | 2 +- .../resources/mapper/Power_UserMapper.xml | 3 +- .../main/java/com/manage/util/DateUtils.java | 5 + .../java/com/manage/util/DrawCheckcode.java | 74 ++++++ .../src/main/java/com/manage/util/Msg.java | 22 +- 22 files changed, 824 insertions(+), 302 deletions(-) create mode 100644 power-admin/src/main/java/com/manage/bean/LoginVoRedis.java create mode 100644 power-admin/src/main/java/com/manage/controller/CheckcodeController.java create mode 100644 power-admin/src/main/java/com/manage/controller/JedisPoolUtil.java create mode 100644 power-admin/src/main/resources/redis.properties create mode 100644 power-admin/src/main/webapp/static/img/login/login_bg.png create mode 100644 power-foundaton/src/main/java/com/manage/util/DrawCheckcode.java diff --git a/power-admin/pom.xml b/power-admin/pom.xml index 8152f0e..ba48fb4 100644 --- a/power-admin/pom.xml +++ b/power-admin/pom.xml @@ -24,6 +24,23 @@ 1.0-SNAPSHOT + + + com.ramostear + Happy-Captcha + 1.0.1 + + + + + + redis.clients + jedis + 3.1.0 + jar + compile + + com.manage power-service @@ -141,18 +158,18 @@ power - - - org.apache.maven.plugins - maven-compiler-plugin - 3.1 - - - 1.8 - 1.8 - UTF-8 - - + + + + + + + + + + + + org.apache.tomcat.maven tomcat7-maven-plugin diff --git a/power-admin/src/main/java/com/manage/bean/LoginVoRedis.java b/power-admin/src/main/java/com/manage/bean/LoginVoRedis.java new file mode 100644 index 0000000..2afb1eb --- /dev/null +++ b/power-admin/src/main/java/com/manage/bean/LoginVoRedis.java @@ -0,0 +1,51 @@ +package com.manage.bean; + +public class LoginVoRedis { + private String username; + private String password; + private int loginFailureCount; + private String loginTime; + + public String getUsername() { + return username; + } + + public void setUsername(String username) { + this.username = username; + } + + public String getPassword() { + return password; + } + + public void setPassword(String password) { + this.password = password; + } + + public int getLoginFailureCount() { + return loginFailureCount; + } + + public void setLoginFailureCount(int loginFailureCount) { + this.loginFailureCount = loginFailureCount; + } + + public String getLoginTime() { + return loginTime; + } + + public void setLoginTime(String loginTime) { + this.loginTime = loginTime; + } + + @Override + public String toString() { + return "LoginVo_Redis{" + + "username='" + username + '\'' + + ", password='" + password + '\'' + + ", loginFailureCount=" + loginFailureCount + + ", loginTime='" + loginTime + '\'' + + '}'; + } + +} diff --git a/power-admin/src/main/java/com/manage/controller/CheckcodeController.java b/power-admin/src/main/java/com/manage/controller/CheckcodeController.java new file mode 100644 index 0000000..a3e730e --- /dev/null +++ b/power-admin/src/main/java/com/manage/controller/CheckcodeController.java @@ -0,0 +1,65 @@ +package com.manage.controller; + + +import com.manage.util.DrawCheckcode; +import com.ramostear.captcha.HappyCaptcha; +import com.ramostear.captcha.support.CaptchaType; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; + +import javax.imageio.ImageIO; +import javax.servlet.ServletOutputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.awt.image.BufferedImage; +import java.io.IOException; + +import static java.lang.System.*; + +@Controller +@RequestMapping("/checkController") +public class CheckcodeController { + @RequestMapping("/check") + @ResponseBody + public String checkcodeCheck(String codeClient, HttpServletRequest request){ + String codeServer = (String)request.getSession().getAttribute("CHECKCODE"); + if (codeClient.equals(codeServer)){ + return "验证码正确"; + }else{ + return "验证码错误"; + } + } + + @RequestMapping("/checkcode") + public void checkcodeMake(HttpServletResponse response, HttpServletRequest request) throws IOException { + + //画验证码 + DrawCheckcode drawCheckcode = new DrawCheckcode(); + BufferedImage image = drawCheckcode.doDraw(); + + //设置响应头,防止缓存 + response.setHeader("Pragma","no-cache"); + response.setHeader("Cache-Control","no-cache"); + response.setHeader("Expires","0"); + //将验证码的值保存在session中,以便校验 + request.getSession().setAttribute("CHECKCODE",drawCheckcode.getCheckCode()); + + ServletOutputStream outputStream = response.getOutputStream(); + ImageIO.write(image,"jpeg",outputStream); + outputStream.flush(); //清空缓冲区数据 + outputStream.close(); //关闭流 + } + + + + @RequestMapping(value="captcha") + @ResponseBody + public void happyCaptcha(HttpServletRequest request, HttpServletResponse response){ + out.println("======生成一次验证码======"); + HappyCaptcha.require(request,response).type(CaptchaType.NUMBER).build().finish(); + } + + +} diff --git a/power-admin/src/main/java/com/manage/controller/FontController.java b/power-admin/src/main/java/com/manage/controller/FontController.java index ad5a4cd..9f2df97 100644 --- a/power-admin/src/main/java/com/manage/controller/FontController.java +++ b/power-admin/src/main/java/com/manage/controller/FontController.java @@ -598,21 +598,13 @@ public class FontController { @RequestMapping(value="getQRcode") @ResponseBody public QrBean getQRcode(QRcode qRcode, HttpServletRequest request){ - // 获得Http客户端 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 创建Post请求 HttpPost httpPost = new HttpPost("http://192.168.1.212:8080/cloudkeyserver/api/login/qrcode/nostatus/2CKV1"); -// qRcode.setLoginTypeBitValue(16); -// qRcode.setType(3); -// qRcode.setProjectUid("cloudkey-fstth"); -// qRcode.setApplicationId("fstth-wzh"); - System.out.println("qRcode:::::"+qRcode.getApplicationId()); //json格式转换 String jsonString = JSON.toJSONString(qRcode); - System.out.println("jsonString1::::"+jsonString); StringEntity entity = new StringEntity(jsonString, "UTF-8"); - System.out.println("jsonString::::"+jsonString); // post请求是将参数放在请求体里面传过去的;这里将entity放入post请求体中 httpPost.setEntity(entity); httpPost.setHeader("Content-Type", "application/json;charset=utf8"); @@ -626,7 +618,6 @@ public class FontController { response = httpClient.execute(httpPost); // 从响应模型中获取响应实体 responseEntity = response.getEntity(); - System.out.println("responseEntity::::"+responseEntity); System.out.println("响应状态为:" + response.getStatusLine()); if (responseEntity != null) { JSONObject jsonObject = JSONObject.parseObject(EntityUtils.toString(responseEntity)); @@ -635,11 +626,8 @@ public class FontController { String qrCodeIdentity = contentsObject.getString("qrCodeIdentity"); JSONArray qrCodes = contentsObject.getJSONArray("qrCodes"); String qrCodeBase64 = qrCodes.getJSONObject(0).get("qrCodeBase64").toString(); - - qrBean.setQrCodeBase64(qrCodeBase64); qrBean.setQrCodeIdentity(qrCodeIdentity); - System.out.println("qrBean::::"+qrBean.getQrCodeIdentity()); } } catch (ClientProtocolException e) { e.printStackTrace(); @@ -672,7 +660,7 @@ public class FontController { @ResponseBody public ScanCodeRes getQRcode(ScanCode scanCode, HttpServletRequest request){ System.out.println("scanCode123::::"+scanCode.getQrCodeIdentity()); - // 获得Http客户端 + // 获得Http客户端 CloseableHttpClient httpClient = HttpClientBuilder.create().build(); // 创建Post请求 HttpPost httpPost = new HttpPost("http://192.168.1.212:8080/cloudkeyserver/api/qrcode/status"); diff --git a/power-admin/src/main/java/com/manage/controller/JedisPoolUtil.java b/power-admin/src/main/java/com/manage/controller/JedisPoolUtil.java new file mode 100644 index 0000000..be18648 --- /dev/null +++ b/power-admin/src/main/java/com/manage/controller/JedisPoolUtil.java @@ -0,0 +1,69 @@ +package com.manage.controller; + + + +import org.springframework.core.io.support.PropertiesLoaderUtils; +import redis.clients.jedis.Jedis; +import redis.clients.jedis.JedisPool; +import redis.clients.jedis.JedisPoolConfig; + +import java.io.IOException; +import java.util.Properties; + + +public class JedisPoolUtil { + + private static volatile JedisPool jedisPool = null; + // 获得资源包 + private static Properties properties; + + static { + try { + properties = PropertiesLoaderUtils.loadAllProperties("redis.properties"); + } catch (IOException e) { + e.printStackTrace(); + } + } + + private static String host = properties.getProperty("redis.host"); + private static Integer port = Integer.valueOf(properties.getProperty("redis.port")); +// private static String auth = properties.getProperty("redis.auth"); + private static Integer maxTotal = Integer.valueOf(properties.getProperty("redis.maxTotal")); + private static Integer maxWait = Integer.valueOf(properties.getProperty("redis.maxWait")); + private static Integer timeout = Integer.valueOf(properties.getProperty("redis.timeOut")); + private static Integer maxIdle = Integer.valueOf(properties.getProperty("redis.maxIdle")); + private static Boolean testOnBorrow = Boolean.valueOf(properties.getProperty("redis.testOnBorrow")); + + private JedisPoolUtil() {}; + + public static JedisPool getJedisPoolInstance() { + synchronized (JedisPoolUtil.class) { + if (jedisPool == null) { + JedisPoolConfig poolConfig = new JedisPoolConfig(); + poolConfig.setMaxTotal(maxTotal); + poolConfig.setMaxIdle(maxIdle); + poolConfig.setMaxWaitMillis(maxWait); + poolConfig.setTestOnBorrow(testOnBorrow); + jedisPool = new JedisPool(poolConfig, host,port,timeout); + } + } + return jedisPool; + } + + //释放回池子 + public static void close(Jedis jedis){ + if(jedis != null){ + if (jedis.isConnected()) { + try { + System.out.println("退出" + jedis.toString() + ":" + jedis.quit()); + jedis.disconnect(); + } catch (Exception e) { + System.out.println("退出失败"); + e.printStackTrace(); + } + } + jedis.close(); + } + } + +} diff --git a/power-admin/src/main/java/com/manage/controller/LoginController.java b/power-admin/src/main/java/com/manage/controller/LoginController.java index be66b01..c55d9c0 100644 --- a/power-admin/src/main/java/com/manage/controller/LoginController.java +++ b/power-admin/src/main/java/com/manage/controller/LoginController.java @@ -1,9 +1,9 @@ package com.manage.controller; import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.manage.bean.LoginVoRedis; import com.manage.dao.Power_Login_SetMapper; -import com.manage.encrypt.Base64; -import com.manage.encrypt.MD5; import com.manage.entity.*; import com.manage.service.*; import com.manage.service.cache.Cache; @@ -11,6 +11,7 @@ import com.manage.service.cache.CacheManager; import com.manage.util.*; import com.manage.vo.*; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.ss.usermodel.DateUtil; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -19,10 +20,13 @@ 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.servlet.ModelAndView; + +import redis.clients.jedis.Jedis; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; +import java.text.DateFormat; +import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.*; @@ -51,10 +55,16 @@ public class LoginController { @Value("${EMRMEDICALRECORD_PORT}") private String port; +// +// @Autowired +// private JedisPool jedisPool; + + @Value("${POWER_PORT}") + private String POWER_PORT; @RequestMapping(value = "login",method = RequestMethod.GET) public String toLogin(Model model){ - Power_Login_Set loginSet = powerLoginSetMapper.selectByPrimaryKey(sysFlag); + Power_Login_Set loginSet = powerLoginSetMapper.selectByPrimaryKey(1); model.addAttribute("loginSet",loginSet); CacheManager.addExcCount("noExc"); return "loginDir/login"; @@ -63,24 +73,47 @@ public class LoginController { @RequestMapping(value = "login",method = RequestMethod.POST) @ResponseBody public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model){ + LoginVoRedis loginVo = new LoginVoRedis(); + Msg msg = new Msg(); + String userName = powerUser.getUserName(); + String userPwd = powerUser.getUserPwd(); + + if (!userName.equals("admin")){ + String s ="00" + userName; + powerUser.setUserName(s); + } + loginVo.setUsername(userName); + loginVo.setPassword(userPwd); + Date date = new Date(); + SimpleDateFormat sdFormatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + loginVo.setLoginTime(sdFormatter.toString()); + System.out.println("loginVo"+loginVo.getLoginTime()); + Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource(); + String userInfo = redis.get(userName); + if (userInfo==null){ + loginVo.setLoginFailureCount(0); + redis.set(userName, JSONObject.toJSONString(loginVo)); + userInfo = redis.get(userName); + } + JSON json =JSONObject.parseObject(userInfo); + System.out.println(json); + LoginVoRedis userLoginInfo = JSONObject.toJavaObject(json, LoginVoRedis.class); + int loginFailCount = userLoginInfo.getLoginFailureCount(); + if (loginFailCount >= 5 ) { + + } try { Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser); + //添加进操作日志 Power_Log log = new Power_Log(); + if(user != null){ //存session密码置空 //是否记住密码功能 MyCookieUtil.remember(request, response); //设置token缓存 String token = UUID.randomUUID().toString(); - //查询归属医院 - /*long start5 = System.currentTimeMillis(); - Power_User_Dict powerUserDict = powerUserDictMapper.selectDictIdByUserId(user.getUserId()); - long end5 = System.currentTimeMillis(); - System.out.println("查询医院时间="+(end5-start5)/1000.0+"s"); - user.setDictId(powerUserDict.getDictId());*/ - //设置用户登录次数缓存 - //CacheManager.addloginUserCount(fmt.format(new Date()),user.getUserName()); CacheManager.addExcCount("noExc"); List list = null; List menuList = new ArrayList<>(); @@ -126,6 +159,7 @@ public class LoginController { CacheManager.putCache(token,new Cache(user,System.currentTimeMillis(),TOKEN_EXPIRE_TIME*1000)); ActionScopeUtils.setSessionAttribute("token",token,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))); ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))); + Power_User user1 = (Power_User)request.getSession().getAttribute("CURRENT_USER"); //单点登录跳转 String url = ""; if(sysFlag == 2){ @@ -135,10 +169,8 @@ public class LoginController { int POWER_PORT = request.getLocalPort(); url = "http://"+ip+":"+POWER_PORT+"/power/gatewayPage"; } - //request.getRequestDispatcher(url).forward(request, response); - - //response.sendRedirect(url); - //return "redirect:gatewayPage"; + redis.set(userName, JSONObject.toJSONString(loginVo)); + request.getSession().setAttribute("user",loginVo); return Msg.success().add("url",url); }else{ //登录失败 @@ -158,6 +190,11 @@ public class LoginController { log.setRemark("已错误【"+wrongNum+"】次"); logService.insert(log); request.setAttribute("msg", "用户名或密码不正确"); + loginFailCount ++; + loginVo.setLoginFailureCount(loginFailCount); + redis.set(userName,JSONObject.toJSONString(loginVo)); + request.getSession().setAttribute("user",loginVo); + return Msg.failUser(); } }catch (Exception e){ e.printStackTrace(); @@ -171,6 +208,11 @@ public class LoginController { } + + + + + //获取session所剩时间 @RequestMapping(value = "getSessionRemainingTime",method = RequestMethod.GET,produces = {"text/json;charset=UTF-8"}) @ResponseBody diff --git a/power-admin/src/main/java/com/manage/controller/SsoLogin.java b/power-admin/src/main/java/com/manage/controller/SsoLogin.java index 720adab..8cdf6e5 100644 --- a/power-admin/src/main/java/com/manage/controller/SsoLogin.java +++ b/power-admin/src/main/java/com/manage/controller/SsoLogin.java @@ -129,7 +129,6 @@ public class SsoLogin { paramMap.put("code",code); paramMap.put("grant_type","authorization_code"); paramMap.put("redirect_uri",urlAddress); - String param="client_id="+clientId+"&client_secret="+clientSecret+"&code="+code+"&grant_type=authorization_code&redirect_uri="+StringUrl; String returnObject =doPost(url,paramMap,null); String userName=""; if(returnObject!=null){ diff --git a/power-admin/src/main/java/com/manage/controller/UserController.java b/power-admin/src/main/java/com/manage/controller/UserController.java index d090b9b..002660c 100644 --- a/power-admin/src/main/java/com/manage/controller/UserController.java +++ b/power-admin/src/main/java/com/manage/controller/UserController.java @@ -168,7 +168,7 @@ public class UserController { ServletRequestAttributes attr=(ServletRequestAttributes) RequestContextHolder.getRequestAttributes(); HttpServletRequest request =attr.getRequest(); Power_UserVo powerUser = powerUserService.selectByPrimaryKey(userId); - powerUser.setUserPwd(Base64.encode(MD5.KL("000000"))); + powerUser.setUserPwd("EUwQTRBEEE0WFxJERRVCREVEEkYQEBFBTUJATU1GR0I="); powerUserService.updateByPrimaryKeySelective(powerUser,request); CacheManager.addExcCount("noExc"); return Msg.success(); diff --git a/power-admin/src/main/resources/redis.properties b/power-admin/src/main/resources/redis.properties new file mode 100644 index 0000000..dde40d5 --- /dev/null +++ b/power-admin/src/main/resources/redis.properties @@ -0,0 +1,16 @@ +##redis\u6570\u636E\u5E93\u7684\u76F8\u5173\u914D\u7F6E +##\u8FDE\u63A5\u5730\u5740ip +redis.host =localhost +##\u7AEF\u53E3\u53F7 +redis.port = 6379 +##\u8BBF\u95EE\u5BC6\u7801 +#redis.auth = +##\u63A7\u5236\u4E00\u4E2Apool\u6700\u591A\u53EF\u4EE5\u6709\u591A\u5C11\u4E2A\u72B6\u6001\u4E3AIdle(\u7A7A)\u7684jedis\u5B9E\u4F8B\u9ED8\u8BA4\u503C\u4E3A8 +redis.maxIdle = 200 +##\u7B49\u5F85\u53EF\u7528\u8FDE\u63A5\u7684\u6700\u5927\u65F6\u95F4\u5355\u4F4D\u4E3A\u6BEB\u79D2 \u9ED8\u8BA4\u4E3A-1\u8868\u793A\u6C38\u4E0D\u8D85\u65F6\uFF0C\u4E00\u65E6\u8D85\u8FC7\u7B49\u5F85\u65F6\u95F4\u5219\u76F4\u63A5\u629B\u51FA +redis.maxWait = 100000 +redis.timeOut = 10000 +##\u8BBE\u7F6E\u4E3Atrue\u5219\u4F1A\u5728borrow\u4E00\u4E2Ajedis\u5B9E\u4F8B\u65F6\uFF0C\u63D0\u524D\u505Avalidate\u64CD\u4F5C +redis.testOnBorrow =true +##\u6700\u5927\u8FDE\u63A5\u6570 +redis.maxTotal=30 \ No newline at end of file diff --git a/power-admin/src/main/webapp/WEB-INF/views/loginDir/login.jsp b/power-admin/src/main/webapp/WEB-INF/views/loginDir/login.jsp index 221af63..fe8a897 100644 --- a/power-admin/src/main/webapp/WEB-INF/views/loginDir/login.jsp +++ b/power-admin/src/main/webapp/WEB-INF/views/loginDir/login.jsp @@ -21,77 +21,178 @@ } } %> - + + + + 嘉时软件 - - - - - -