登陆时无法登录

master
linjj 2 years ago
parent d240697b68
commit b8eadc7868

@ -78,6 +78,8 @@
<!-- maven依赖 -->
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.github.oshi</groupId>
@ -85,6 +87,7 @@
<version>3.4.4</version>
</dependency>
<!-- framework start -->
<!-- <dependency>
<groupId>com.manage</groupId>

@ -30,6 +30,16 @@
<version>1.0-SNAPSHOT</version>
</dependency>
<!-- redis 依赖-->
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.1.0</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>com.manage</groupId>
<artifactId>power-api</artifactId>
@ -186,6 +196,12 @@
<artifactId>power-dao</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.jetbrains</groupId>
<artifactId>annotations</artifactId>
<version>13.0</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>power</finalName>

@ -4,6 +4,8 @@ import com.fasterxml.jackson.databind.ObjectMapper;
import com.manage.dao.Power_DeptMapper;
import com.manage.dao.Power_NoticeMapper;
import com.manage.dao.Power_UserMapper;
import com.manage.encrypt.Base64;
import com.manage.encrypt.MD5;
import com.manage.entity.Power_Dept;
import com.manage.entity.Power_Menu;
import com.manage.entity.Power_Notice;
@ -22,10 +24,10 @@ import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import java.util.*;
/**
@ -68,6 +70,35 @@ public class FontController {
@Autowired
private Power_DeptMapper powerDeptMapper;
@RequestMapping(value = "updatePassword")
public String updatePassword(Model model , HttpServletRequest request){
return"/userDir/updatePassword1";
}
@RequestMapping(value = "updatePass")
@ResponseBody
public String updatePass(String passFlag){
if (passFlag.equals("")){
return "";
}
List<Power_UserVo> powerUserVos = power_userMapper.getuserNameList();
StringBuffer sb=new StringBuffer();
for (Power_UserVo list:powerUserVos){
String userPwd = list.getUserPwd();
String decode = Base64.decode(userPwd);
String jm = MD5.JM(decode);
String userName = list.getUserName();
boolean contains = jm.contains(userName);
if (contains){
System.out.println("userName:"+userName);
sb.append("'"+userName+"'"+",");
}
}
String s = sb.toString();
return s ;
}
/**
* 2.1
*
@ -780,4 +811,6 @@ public class FontController {
}
}
}

@ -13,6 +13,7 @@ import com.manage.util.*;
import com.manage.vo.*;
import org.apache.commons.lang3.StringUtils;
import org.java_websocket.WebSocket;
import org.jetbrains.annotations.NotNull;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
@ -21,6 +22,7 @@ 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 redis.clients.jedis.Jedis;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@ -31,6 +33,10 @@ import java.util.*;
public class LoginController {
@Value("${TOKEN_EXPIRE_TIME}")
private long TOKEN_EXPIRE_TIME;
@Value("${SERVER_IP}")
private String SERVER_IP;
@Value("${SERVER_PORT}")
private String SERVER_PORT;
@Value("${EMRRECORD_URLHEAD}")
private String EMRRECOD_URLHEAD;
@Autowired
@ -57,8 +63,22 @@ public class LoginController {
}
@RequestMapping(value = "login",method = RequestMethod.POST)
public String login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception {
@ResponseBody
public Msg login(Power_User powerUser,HttpServletResponse response, HttpServletRequest request,Model model) throws Exception {
Jedis redis = JedisPoolUtil.getJedisPoolInstance().getResource();
String userPwd = powerUser.getUserPwd();
String userName = powerUser.getUserName();
String userInfo = redis.get(userName);
//用来记录错误的次数
String errorPwsCount = "0";
//没有这个id的话新建一个
if (userInfo == null) {
redis.set(userName, errorPwsCount);
}
//获取已经记录错误次数
int i = Integer.parseInt(redis.get(userName));
//小于5可以继续登录,大于5
if (i < 5) {
try {
Power_UserVo user = powerUserService.findPowerUserByUserNameAndUserPwd(powerUser);
//添加进操作日志
@ -77,9 +97,6 @@ public class LoginController {
//设置token缓存
String date = String.valueOf(DateUtils.getDate());
String token = UUID.randomUUID().toString();
//查询归属医院
/* long start5 = System.currentTimeMillis();
Power_User_Dict powerUserDict = powerUserDictMapper.selectDictIdByUserId(user.getUserId());
@ -117,7 +134,6 @@ public class LoginController {
}
user.setMenuList(menuList);
user.setMenus(menus);
//设置科室
StringBuilder power_depts = new StringBuilder();
List<Power_Dept> power_depts1 = power_deptService.selectByPrimaryKeys(user.getDeptId());
@ -133,8 +149,6 @@ public class LoginController {
if (user.getDeptIdQuality()!=null){
List<Power_Dept> power_depts2 = power_deptService.selectByPrimaryKeys(user.getDeptIdQuality());
for(int a=0;a<power_depts2.size();a++){
String deptCode = power_depts2.get(a).getDeptCode();
System.out.println("deptCode:::"+deptCode);
if(a<power_depts2.size()-1){
power_depts3.append(power_depts2.get(a).getDeptCode()).append(",");
}else{
@ -148,10 +162,14 @@ public class LoginController {
ActionScopeUtils.setSessionAttribute("CURRENT_USER",user,Integer.valueOf(String.valueOf(TOKEN_EXPIRE_TIME))/1000);
String reg = "^(?![A-Za-z]+$)(?![A-Z\\d]+$)(?![A-Z\\W]+$)(?![a-z\\d]+$)(?![a-z\\W]+$)(?![\\d\\W]+$)\\S{8,20}$";
boolean msg=userPwd.matches(reg);
redis.del(userName);
JedisPoolUtil.close(redis);
if (msg==false){
return "/userDir/updatePassword1";
String url = "http://" + SERVER_IP + ":" + SERVER_PORT +"/power"+ "/font/updatePassword";
return Msg.success().add("url", url);
}else {
return "redirect:gatewayPage";
String url = "http://" + SERVER_IP + ":" + SERVER_PORT + "/power/gatewayPage";
return Msg.success().add("url", url);
}
}else{
//登录失败
@ -172,13 +190,22 @@ public class LoginController {
log.setRemark("已错误【"+wrongNum+"】次");
logService.insert(log);
request.setAttribute("msg", "用户名或密码不正确");
redis.incr(userName);
JedisPoolUtil.close(redis);
return Msg.failUser();
}
}catch (Exception e){
ExceptionPrintUtil.printException(e);
e.printStackTrace();
CacheManager.addExcCount("exc");
}
return "loginDir/login";
}else {
//失败次数大于五时锁十五分钟
redis.setex(userName, 900, i + "");
JedisPoolUtil.close(redis);
return Msg.failUser2();
}
return null;
}
@RequestMapping("refuse")
public String refuse(){
@ -186,6 +213,11 @@ public class LoginController {
}
//获取session所剩时间
@RequestMapping(value = "getSessionRemainingTime",method = RequestMethod.GET,produces = {"text/json;charset=UTF-8"})
@ResponseBody

@ -190,7 +190,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(Base64.encode(MD5.KL("wzh@123456")));
powerUserService.updateByPrimaryKeySelective(powerUser,request);
CacheManager.addExcCount("noExc");
return Msg.success();
@ -227,7 +227,13 @@ public class UserController {
@OptionalLog(module = "修改密码",methods = "用户管理")
@RequestMapping(value = "/updatePassword")
@ResponseBody
public Msg updatePassword(String userPwd) throws Exception{
public Msg updatePassword(String userPwd,HttpServletRequest request) throws Exception{
Power_User user = (Power_User)request.getSession().getAttribute("CURRENT_USER");
String userName = user.getUserName();
boolean status = userPwd.contains(userName);
if (status){
return Msg.updatePassword();
}
boolean result = powerUserService.updatePassword(userPwd);
CacheManager.addExcCount("noExc");
return Msg.success().add("result",result);

@ -0,0 +1,69 @@
package com.manage.util;
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();
}
}
}

@ -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 =JSdocus@702
##\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 = 0
##\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

@ -51,7 +51,7 @@
var userId = $("#userId").val();
var strSplit = $("#strSplit").val();
var webSocketUrl = $("#webSocketUrl").val();
var ws = new WebSocket("ws://"+webSocketUrl);
var ws = new WebSocket("wss://"+webSocketUrl);
ws.onopen = function(){
ws.send("power_"+userId);
console.log("连接...")

@ -0,0 +1,86 @@
<%@ page import="java.net.URLDecoder" %>
<%@ page import="com.manage.encrypt.Base64" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jspf/common.jspf" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String password="";
String userName="";
String checked="";
Cookie[] cookies = request.getCookies(); //取出cookie对象组
for(int i = 0; cookies != null && i < cookies.length;i++){
Cookie cookie = cookies[i]; // 取出其中的一个对象含有name ,value
if(cookie != null && "name".equals(cookie.getName())){ //获取第一个cookie对象的name
userName = URLDecoder.decode(cookie.getValue(), "UTF-8");//进行解码
checked = "checked";
}
if(cookie != null && "password".equals(cookie.getName())){
password = cookie.getValue();
password = Base64.decodeBase64(password);
}
}
%>
<html>
<head>
<title>嘉时软件-广东医科大学附属医院</title>
<!--导入CSS -->
<link rel="stylesheet" href="${path}/static/css/login.css">
<script>
var path = "${path}";
</script>
</head>
<body style="background:url('${path}/static/img/login/bg.png')">
<!--头部-->
<div class="login_head">
<!--头部文字-->
<div class="head_left left">
<div class="head_left_span">
<span>嘉时&nbsp;&nbsp;&nbsp;病历无纸化归档管理系统</span></div>
</div>
<!--右边logon-->
<div class="head_right left">
<img src="${path}/static/img/login/logo/zhanjiang.png">
</div>
</div>
<!--中间-->
<div class="login_content">
<div class="content_left left">
<div class="image1" style="background:url('${path}/static/img/login/图.png') no-repeat">
</div>
</div>
<div class="content_login left">
<form method="post" action="${path}/login" id="fid">
<div class="inputDiv" id="erweimadiv" hidden="hidden">
<img id="erweima" src=""/>
</div>
<div id="zhdl" class="login_div" style="background:url('${path}/static/img/login/登录框.png') no-repeat">
<div class="login_title">
<h3 style="text-align: center">账号登录</h3>
</div>
<div class="inputDiv">
<input type="text" id="userName" name="userName" class="form-control uname left" placeholder="用户名" required value="<%=userName%>"/>
</div>
<div class="inputDiv">
<input type="password" id="userPwd" name="userPwd" class="form-control pword m-b" placeholder="密码" required value="<%=password%>" autocomplete="new-password"/>
</div>
<div class="inputDiv">
<label><input type="checkbox" name="rememberMe" id="rememberMe" value="yes" style="vertical-align:middle; margin-top:0;" <%=checked%>>记住密码</label>
<a href="#" id="smdl" style="float: right; margin-right: 10px">扫码登录</a>
</div>
<%--<a href="#" id="forgetPwd" style="float: right;">忘记密码了?</a>--%>
<div class="inputDiv">
<button class="btn btn-success btn-block">登录</button>
<p class="text-danger">${msg}</p>
</div>
</div>
</form>
</div>
</div>
<!--尾部-->
<div class="login_foot">
<div class="span_div"><span>技术支持:厦门嘉时软件科技有限公司</span></div>
</div>
<script type="text/javascript" src="${path}/static/js/login.js"></script>
</body>
</html>

@ -0,0 +1,196 @@
<%@ page import="java.net.URLDecoder" %>
<%@ page import="com.manage.encrypt.Base64" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jspf/common.jspf" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
String password="";
String userName="";
String checked="";
Cookie[] cookies = request.getCookies(); //取出cookie对象组
for(int i = 0; cookies != null && i < cookies.length;i++){
Cookie cookie = cookies[i]; // 取出其中的一个对象含有name ,value
if(cookie != null && "name".equals(cookie.getName())){ //获取第一个cookie对象的name
userName = URLDecoder.decode(cookie.getValue(), "UTF-8");//进行解码
checked = "checked";
}
if(cookie != null && "password".equals(cookie.getName())){
password = cookie.getValue();
password = Base64.decodeBase64(password);
}
}
%>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>嘉时软件</title>
</head>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.login{
width: 100%;
height: 100vh;
display: flex;
}
#banar{
width: 300px;
height: 50px;
background-color: #999;
font-weight: bold;
font-size: 3em;
text-align: center;
line-height: 40px;
font-family: "fantasy";
color: burlywood;
margin: 10px;
display: inline-block;
}
#chang{
font-size: 14px;
color: darkgreen;
cursor: pointer;/* 鼠标经过变成小手 */
}
#txt{
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #555555;
margin: 10px 0;
/*width: 200px;*/
/*height: 40px;*/
/*outline: none;!* 鼠标聚焦文本框没有边框线*!*/
}
.login .left{
width: 1100px;
height: 100%;
}
.login .left img{
width: 100%;
height: 100%;
}
.login .right{
margin: 0 auto;
margin-top: 30px;
}
.logo{
margin-top: 74px;
margin-bottom: 123px;
display: flex;
align-items: center;
}
.title{
text-align: center;
font-size: 40px;
font-weight: 500;
margin-top: 34px;
}
.shuru{
width: 500px;
height: 50px;
background: #EFF0F4;
border-radius: 6px;
border: 1px solid #EFF0F4;
outline: none;
padding-left: 20px;
font-size: 16px;
}
.shuru:focus{
border-color: #09f !important;
}
.item{
margin-bottom: 20px;
}
.item1{
margin-bottom: 30px;
}
.item-name{
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #555555;
margin: 10px 0;
}
.btn{
width: 500px;
height: 64px;
background: linear-gradient(90deg, #00AFFF 0%, #007CFF 100%);
border-radius: 6px;
text-align: center;
line-height: 53px;
cursor: pointer;
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
margin-top: 108px;
}
.boxCss{
margin-top: 60px;
}
.bottom{
width: 500px;
text-align: center;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #919191;
margin-top: 120px;
}
</style>
<body>
<div class="login">
<div class="left">
<img src="./static/img/login/login_bg.png" alt="">
</div>
<div class="right">
<img src="./static/img/login/logo/zhanjiang.png" alt="" width="378px" height="76px">
<div class="title">
账号登录
</div>
<div class="boxCss">
<form action="">
<div class="item item1">
<div class="item-name">用户名</div>
<input type="text" placeholder="请输入" class="shuru" id="userName" name="userName" >
</div>
<div class="item">
<div class="item-name">用户密码</div>
<input type="password" placeholder="请输入" class="shuru" id="userPwd" name="userPwd" required value="<%=password%>" autocomplete="new-password">
</div>
<div class="item">
<div class="item-name" id="txt1">验证码</div>
<input type="text" placeholder="请输入" class="shuru" id="txt" name="txt">
</div>
<%--验证码:<input type="text" id="txt"><br>--%>
<div id="banar"></div>
<span id="chang">看不清换一张</span><br>
<%--<input type="submit" value="验证" id="sub">--%>
<div >
<input type="checkbox" name="" id="">
<span>记住密码</span>
</div>
</form>
</div>
<div class="btn" onclick="login()">立即登录</div>
<div class="bottom">
<div class="top">技术支持:厦门嘉时软件科技有限公司 </div>
<div class="bot">Copyright © 2019-2090 厦门嘉时软件. All rights reserved.</div>
</div>
</div>
</div>
<script type="text/javascript" src="${path}/static/js/login.js?time=2022-01-13"></script>
</body>
</html>

@ -1,6 +1,6 @@
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page import="java.net.URLDecoder" %>
<%@ page import="com.manage.encrypt.Base64" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="/WEB-INF/jspf/common.jspf" %>
<%
String path = request.getContextPath();
@ -21,66 +21,180 @@
}
}
%>
<html>
<html lang="en">
<head>
<title>嘉时软件-广东医科大学附属医院</title>
<!--导入CSS -->
<link rel="stylesheet" href="${path}/static/css/login.css">
<script>
var path = "${path}";
</script>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>嘉时软件</title>
</head>
<body style="background:url('${path}/static/img/login/bg.png')">
<!--头部-->
<div class="login_head">
<!--头部文字-->
<div class="head_left left">
<div class="head_left_span">
<span>嘉时&nbsp;&nbsp;&nbsp;病历无纸化归档管理系统</span></div>
</div>
<!--右边logon-->
<div class="head_right left">
<img src="${path}/static/img/login/logo/zhanjiang.png">
<link rel="stylesheet" href="${path}/static/css/login.css">
<script>
var path = "${path}";
</script>
<style>
*{
margin: 0;
padding: 0;
box-sizing: border-box;
}
.login{
width: 100%;
height: 100vh;
display: flex;
}
#banar{
width: 300px;
height: 50px;
background-color: #999;
font-weight: bold;
font-size: 3em;
text-align: center;
line-height: 40px;
font-family: "fantasy";
color: burlywood;
margin: 10px;
display: inline-block;
}
#chang{
font-size: 14px;
color: darkgreen;
cursor: pointer;/* 鼠标经过变成小手 */
}
#txt{
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #555555;
margin: 10px 0;
/*width: 200px;*/
/*height: 40px;*/
/*outline: none;!* 鼠标聚焦文本框没有边框线*!*/
}
.login .left{
width: 1100px;
height: 100%;
}
.login .left img{
width: 100%;
height: 100%;
}
.login .right{
margin: 0 auto;
margin-top: 30px;
}
.logo{
margin-top: 74px;
margin-bottom: 123px;
display: flex;
align-items: center;
}
.title{
text-align: center;
font-size: 40px;
font-weight: 500;
margin-top: 34px;
}
.shuru{
width: 500px;
height: 50px;
background: #EFF0F4;
border-radius: 6px;
border: 1px solid #EFF0F4;
outline: none;
padding-left: 20px;
font-size: 16px;
}
.shuru:focus{
border-color: #09f !important;
}
.item{
margin-bottom: 20px;
}
.item1{
margin-bottom: 30px;
}
.item-name{
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #555555;
margin: 10px 0;
}
.btn{
width: 500px;
height: 64px;
background: linear-gradient(90deg, #00AFFF 0%, #007CFF 100%);
border-radius: 6px;
text-align: center;
line-height: 53px;
cursor: pointer;
font-size: 22px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #FFFFFF;
margin-top: 108px;
}
.boxCss{
margin-top: 60px;
}
.bottom{
width: 500px;
text-align: center;
font-size: 14px;
font-family: Source Han Sans CN;
font-weight: 400;
color: #919191;
margin-top: 120px;
}
</style>
<body>
<div class="login">
<div class="left">
<img src="./static/img/login/login_bg.png" alt="">
</div>
</div>
<!--中间-->
<div class="login_content">
<div class="content_left left">
<div class="image1" style="background:url('${path}/static/img/login/图.png') no-repeat">
<div class="right">
<img src="./static/img/login/logo/zhanjiang.png" alt="" width="378px" height="76px">
<div class="title">
账号登录
</div>
</div>
<div class="content_login left">
<form method="post" action="${path}/login" id="fid">
<div class="inputDiv" id="erweimadiv" hidden="hidden">
<img id="erweima" src=""/>
</div>
<div id="zhdl" class="login_div" style="background:url('${path}/static/img/login/登录框.png') no-repeat">
<div class="login_title">
<h3 style="text-align: center">账号登录</h3>
<div class="boxCss">
<form action="" >
<div class="item item1">
<div class="item-name">用户名</div>
<input type="text" placeholder="请输入" class="shuru" id="userName" name="userName" >
</div>
<div class="inputDiv">
<input type="text" id="userName" name="userName" class="form-control uname left" placeholder="用户名" required value="<%=userName%>"/>
<div class="item">
<div class="item-name">用户密码</div>
<input type="password" placeholder="请输入" class="shuru" id="userPwd" name="userPwd">
</div>
<div class="inputDiv">
<input type="password" id="userPwd" name="userPwd" class="form-control pword m-b" placeholder="密码" required value="<%=password%>" autocomplete="new-password"/>
<div class="item">
<div class="item-name" id="txt1">验证码</div>
<input type="text" placeholder="请输入" class="shuru" id="txt" name="txt">
</div>
<div class="inputDiv">
<label><input type="checkbox" name="rememberMe" id="rememberMe" value="yes" style="vertical-align:middle; margin-top:0;" <%=checked%>>记住密码</label>
<div id="banar"></div>
<span id="chang">看不清换一张</span><br>
<div >
<input type="checkbox" name="rememberMe" id="rememberMe">
<span>记住密码</span>
<a href="#" id="smdl" style="float: right; margin-right: 10px">扫码登录</a>
</div>
<%--<a href="#" id="forgetPwd" style="float: right;">忘记密码了?</a>--%>
<div class="inputDiv">
<button class="btn btn-success btn-block">登录</button>
<p class="text-danger">${msg}</p>
</div>
</div>
</form>
</form>
<div class="btn" onclick="login()">立即登录</div>
</div>
<div class="bottom">
<div class="top">技术支持:厦门嘉时软件科技有限公司 </div>
<div class="bot">Copyright © 2019-2090 厦门嘉时软件. All rights reserved.</div>
</div>
</div>
</div>
<!--尾部-->
<div class="login_foot">
<div class="span_div"><span>技术支持:厦门嘉时软件科技有限公司</span></div>
</div>
<script type="text/javascript" src="${path}/static/js/login.js"></script>
<script type="text/javascript" src="${path}/static/js/login.js?time=2022-01-13"></script>
</body>
</html>

@ -48,7 +48,7 @@
}
.login_div{
width:400px;
height:400px;
height:450px;
margin-left: 14%;
margin-top: 10%;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 661 KiB

@ -1,6 +1,202 @@
/**
/**
* Created by ljx on 2019/4/25.
*/
$(function () {
//cookie数据保存格式是key=value;key=value;形式loginInfo为保存在cookie中的key值具体看controller代码
/*if(str != ""){
var userName = str.split("#")[0];
var userPwd = str.split("#")[1];
//自动填充用户名和密码
$("#userName").val(userName);
$("#userPwd").val(userPwd);
//并且选中复选框
$("#rememberMe").attr("checked", true);
}*/
//获取cookie
/*function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
}
return "";
}*/
$("#forgetPwd").on("click", function () {
alert("请联系管理员进行修改密码!");
});
});
var banar = document.getElementById('banar');
var txt = document.getElementById('txt');
var sub = document.getElementById('sub');
var chang = document.getElementById('chang');
//创建一个数组,里面包含着随机验证码所能出现的全部字符
var allchar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e",
"f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"];
var result;
function randomChar() {
result = "";//创建空的字符串,方便等下接收值
//循环找出4的字符
for (var i = 0; i < 4; i++) {
//随机生成一个0-61的数字
var index = Math.floor(Math.random() * 36);
//将随机生成的数字作为数组的索引然后赋给result
//每次赋一个数组值循环4次最后就是4个字符
result += allchar[index];
}
//把随机生成的4个字符添加到ID为banar的div里面
banar.innerHTML = result;
//点击验证按钮,判断我们输入的值和随机生成的值是否一样?
//一样就弹出验证成功,不一样就弹出验证错误。
// sub.onclick = function () {
// if (txt.value == result) {
// alert("验证成功!!!");
// } else {
// alert("验证错误!!!");
// randomChar();//如果错误执行randomChar方法重新随机生成4个字符
// txt.value = "";//如果错误,我们输入的验证码等于空,方便我们再次输入
// }
// };
}
randomChar();
//点击"看不见换一张"时,执行randomChar方法重新随机生成4个字符我们输入的验证码等于空方便我们再次输入
chang.onclick = function () {
txt.value = "";
randomChar();
}
function login() {
var userName = $("#userName").val();
var userPwd = $("#userPwd").val();
var txt = $("#txt").val();
var rememberMeChecked = $("input[type='checkbox']").is(':checked');
var rememberMe = '';
if (rememberMeChecked) {
rememberMe = 'yes';
}
if (userName == '') {
return toastr.warning("用户名不能为空!");
}
if (userPwd == '') {
return toastr.warning("密码不能为空!");
}
if (txt == ''){
return toastr.warning("验证码不能为空!");
}
if(result != txt){
randomChar();
return toastr.warning("验证码错误!")
}
$.ajax({
type: "POST",
url: path + "/login",
data: {userName: userName, userPwd: userPwd, rememberMe: rememberMe},
success: function (data) {
if (data.code == 100) {
window.location.href = data.extend.url;
}
if (data.code == 200){
toastr.warning(data.msg);
}
},
})
}
var interval = "";
var qrCodeIdentity = "";
//获取扫码登录二维码
function handoffLogin() {
$.ajax({
type: "POST",
data: {loginTypeBitValue: 16, type: 3, projectUid: "cloudkey-fstth", ApplicationId: "fstth-wzh"},
url: path + '/font/getQRcode',
success: function (data) {
qrCodeIdentity = data.qrCodeIdentity;
$("#QRcordImg").prop("src", "data:image/jpeg;base64," + data.qrCodeBase64);
//轮询监听用户扫码
interval = setInterval(scanCodeLogin, 1000, qrCodeIdentity);
}
})
$("#switchHandoff").css("display", "none");
$("#switchHandoff2").css("display", "block");
}
function scanCodeLogin() {
$.ajax({
type: "POST",
data: {qrCodeIdentity: qrCodeIdentity},
url: path + '/font/getScanCode',
success: function (body) {
if (body.verifyStatus == 0) {
//扫码认证成功后撤销监听
clearInterval(interval);
$.ajax({
type: "POST",
data: {userToken: body.userToken},
url: path + '/font/getUserInfo',
success: function (tlte) {
if (tlte.msgType == 1) {
$.ajax({
type: "POST",
data: {userName: tlte.uid},
url: path + '/font/qRCodeLogin',
success: function (tltel) {
if (tltel.code == 100) {
window.location.href = tltel.extend.url;
} else {
$("#msg").text(tltel.msg);
}
}
})
} else {
alert("登录失败请重新登录")
}
}
})
}
}
})
}
function handoffLogin2() {
$("#switchHandoff").css("display", "block");
$("#switchHandoff2").css("display", "none");
clearInterval(interval);
}
$('body').keydown(function () {
if (event.keyCode == '13') {
login();
}
})
/**
* 判断是iframe框架跳出iframe框架使用top链接
*/
if (top.location != location) {
top.location.href = location.href;
}
$(function () {
//cookie数据保存格式是key=value;key=value;形式loginInfo为保存在cookie中的key值具体看controller代码
/*if(str != ""){
@ -110,34 +306,3 @@ $(function () {
}
});
$('body').keydown(function () {
if (event.keyCode == '13') {
var userName = $("#userName").val();
var userPwd = $("#userPwd").val();
var rememberMeChecked = $("input[type='checkbox']").is(':checked');
var rememberMe = '';
if (rememberMeChecked) {
rememberMe = 'yes';
}
if (userName == '') {
toastr.warning("用户名不能为空!");
} else {
if (userPwd == '') {
toastr.warning("密码不能为空!");
} else {
$.ajax({
type: "POST",
url: path + "/login",
data: {userName: userName, userPwd: userPwd, rememberMe: rememberMe},
success: function (data) {
},
})
}
}
}
})

@ -0,0 +1,189 @@
/**
* Created by ljx on 2019/4/25.
*/
var banar = document.getElementById('banar');
var txt = document.getElementById('txt');
var sub = document.getElementById('sub');
var chang = document.getElementById('chang');
//创建一个数组,里面包含着随机验证码所能出现的全部字符
var allchar = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, "a", "b", "c", "d", "e",
"f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r",
"s", "t", "u", "v", "w", "x", "y", "z"];
var result;
function randomChar() {
result = "";//创建空的字符串,方便等下接收值
//循环找出4的字符
for (var i = 0; i < 4; i++) {
//随机生成一个0-61的数字
var index = Math.floor(Math.random() * 36);
//将随机生成的数字作为数组的索引然后赋给result
//每次赋一个数组值循环4次最后就是4个字符
result += allchar[index];
}
//把随机生成的4个字符添加到ID为banar的div里面
banar.innerHTML = result;
//点击验证按钮,判断我们输入的值和随机生成的值是否一样?
//一样就弹出验证成功,不一样就弹出验证错误。
// sub.onclick = function () {
// if (txt.value == result) {
// alert("验证成功!!!");
// } else {
// alert("验证错误!!!");
// randomChar();//如果错误执行randomChar方法重新随机生成4个字符
// txt.value = "";//如果错误,我们输入的验证码等于空,方便我们再次输入
// }
// };
}
randomChar();
//点击"看不见换一张"时,执行randomChar方法重新随机生成4个字符我们输入的验证码等于空方便我们再次输入
chang.onclick = function () {
txt.value = "";
randomChar();
}
$(function () {
//cookie数据保存格式是key=value;key=value;形式loginInfo为保存在cookie中的key值具体看controller代码
/*if(str != ""){
var userName = str.split("#")[0];
var userPwd = str.split("#")[1];
//自动填充用户名和密码
$("#userName").val(userName);
$("#userPwd").val(userPwd);
//并且选中复选框
$("#rememberMe").attr("checked", true);
}*/
//获取cookie
/*function getCookie(cname) {
var name = cname + "=";
var ca = document.cookie.split(';');
for(var i=0; i<ca.length; i++) {
var c = ca[i];
while (c.charAt(0)==' ') c = c.substring(1);
if (c.indexOf(name) != -1) return c.substring(name.length, c.length);
}
return "";
}*/
$("#forgetPwd").on("click", function () {
alert("请联系管理员进行修改密码!");
});
$("#smdl").on("click", function () {
$.ajax({
type: "post",
url: "methodForEmrMedical/getErweima",
data: {
responseType: "code",
//clientId:"2017070411003376",
clientId: "2019111514014789",
selfSign: "true"
},
success: function (data) {
var requestId = "";
$.each(data, function (index, obj) {
//获取二维码
var imgBase64 = obj.imgBase64;
var zhdl = document.getElementById("zhdl");
var erweima = document.getElementById("erweima");
var erweimadiv = document.getElementById("erweimadiv");
//给img标签src属性赋值
erweima.setAttribute("src", "data:image/jpg;base64," + imgBase64);
requestId = obj.requestId;
erweimadiv.style.display = "block";
zhdl.style.display = "none";
return false;
});
polling(requestId);
},
})
});
function polling(requestId, delay = 1000) {
return new Promise((resolve, reject) => {
$.ajax({
type: "post",
url: "methodForEmrMedical/getUser",
data: {
requestId: requestId,
//clientId:"2017070411003376"
clientId: "2019111514014789"
},
success: function (data) {
$.each(data, function (index, obj) {
//轮询查询接口
if (obj === '未授权') { //是否继续轮询
setTimeout(() => {
resolve(polling(requestId, delay));
}, delay)
} else {
smlogin(obj);
resolve(obj);
}
return false;
})
}
})
})
}
function smlogin(user) {
$.ajax({
type: "post",
url: "methodForEmrMedical/smlogin",
data: {
openId: user.openId,
clientId: "2019111514014789"
},
success: function (data) {
if (data.isSuccess) {
window.location.href = data.url;
} else {
//window.location.href = data.url;
window.location.reload();
alert(data.msg);
}
}
})
}
});
$('body').keydown(function () {
if (event.keyCode == '13') {
var userName = $("#userName").val();
var userPwd = $("#userPwd").val();
var rememberMeChecked = $("input[type='checkbox']").is(':checked');
var rememberMe = '';
if (rememberMeChecked) {
rememberMe = 'yes';
}
if (userName == '') {
toastr.warning("用户名不能为空!");
} else {
if (userPwd == '') {
toastr.warning("密码不能为空!");
} else {
$.ajax({
type: "POST",
url: path + "/login",
data: {userName: userName, userPwd: userPwd, rememberMe: rememberMe},
success: function (data) {
},
})
}
}
}
})

@ -50,6 +50,9 @@ $(function() {
data:{userPwd : $("#newUserPwd").val()},
dataType:'json',
success: function(data){
if (data.code == 200){
return toastr.success("密码中不能包含账号!");
}
if(data.extend.result){
toastr.success("修改成功!");
setTimeout(function(){

@ -500,7 +500,7 @@ function resetPassword(){
if(ids.length == 2){
Common.confirm({
title: "提示",
message: '确定是否重置用户名'+userName[0]+'的密码为000000',
message: '确定是否重置用户名'+userName[0]+'的密码为wzh@123456',
operate: function (reselt) {
if (reselt) {
$.ajax({

@ -489,7 +489,7 @@ function resetPassword(){
if(ids.length == 2){
Common.confirm({
title: "提示",
message: '确定是否重置用户名'+userName[0]+'的密码为000000',
message: '确定是否重置用户名'+userName[0]+'的密码为wzh@123456',
operate: function (reselt) {
if (reselt) {
$.ajax({

@ -26,6 +26,9 @@ public interface Power_UserMapper {
public Power_UserVo findPowerUserByUserNameAndUserPwd(Power_User powerUser);
public List<Power_UserVo> getuserNameList();
List<Power_UserVo> findSomeByMore(Power_UserVo powerUser);
int getTotal(Power_UserVo powerUser);

@ -779,5 +779,8 @@
where power_user.role_id = '22'
and effective = 1
</select>
<select id="getuserNameList" resultType="com.manage.vo.Power_UserVo">
select * from power_user_1
</select>
</mapper>

@ -27,7 +27,34 @@ public class Msg {
result.setMsg("success");
return result;
}
public static Msg failUser(){
Msg result=new Msg();
result.setCode(200);
result.setMsg("账号或密码错误,登录失败五次锁定账号十分钟");
return result;
}
public static Msg updatePassword(){
Msg result=new Msg();
result.setCode(200);
result.setMsg("密码中不能包含账号");
return result;
}
public static Msg failUser2(){
Msg result=new Msg();
result.setCode(200);
result.setMsg("账号或密码错误次数过多,请十分钟后在尝试登录");
return result;
}
public static Msg fail(){
Msg result=new Msg();
result.setCode(200);

Loading…
Cancel
Save