渗透测试漏洞修复
This commit is contained in:
parent
462a4df8af
commit
819512ea6c
|
|
@ -3,8 +3,10 @@ package com.bonus.auth.controller;
|
||||||
import com.bonus.auth.form.LoginBody;
|
import com.bonus.auth.form.LoginBody;
|
||||||
import com.bonus.auth.form.RegisterBody;
|
import com.bonus.auth.form.RegisterBody;
|
||||||
import com.bonus.auth.service.SysLoginService;
|
import com.bonus.auth.service.SysLoginService;
|
||||||
|
import com.bonus.common.core.constant.Constants;
|
||||||
import com.bonus.common.core.constant.SecurityConstants;
|
import com.bonus.common.core.constant.SecurityConstants;
|
||||||
import com.bonus.common.core.domain.R;
|
import com.bonus.common.core.domain.R;
|
||||||
|
import com.bonus.common.core.exception.CaptchaException;
|
||||||
import com.bonus.common.core.utils.JwtUtils;
|
import com.bonus.common.core.utils.JwtUtils;
|
||||||
import com.bonus.common.core.utils.StringUtils;
|
import com.bonus.common.core.utils.StringUtils;
|
||||||
import com.bonus.common.redis.service.RedisService;
|
import com.bonus.common.redis.service.RedisService;
|
||||||
|
|
@ -46,6 +48,22 @@ public class TokenController
|
||||||
// 用户登录
|
// 用户登录
|
||||||
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(),
|
LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword(),
|
||||||
form.getType(),form.getJwtToken());
|
form.getType(),form.getJwtToken());
|
||||||
|
if (StringUtils.isEmpty(form.getCode()))
|
||||||
|
{
|
||||||
|
throw new CaptchaException("验证码不能为空");
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(form.getUuid()))
|
||||||
|
{
|
||||||
|
throw new CaptchaException("验证码已失效");
|
||||||
|
}
|
||||||
|
String verifyKey = Constants.CAPTCHA_CODE_KEY + form.getUuid();
|
||||||
|
String captcha = redisService.getCacheObject(verifyKey);
|
||||||
|
redisService.deleteObject(verifyKey);
|
||||||
|
|
||||||
|
if (!form.getCode().equalsIgnoreCase(captcha))
|
||||||
|
{
|
||||||
|
throw new CaptchaException("验证码错误");
|
||||||
|
}
|
||||||
// 获取登录token
|
// 获取登录token
|
||||||
return R.ok(tokenService.createToken(userInfo));
|
return R.ok(tokenService.createToken(userInfo));
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -27,6 +27,13 @@ public class LoginBody
|
||||||
*/
|
*/
|
||||||
private String jwtToken;
|
private String jwtToken;
|
||||||
|
|
||||||
|
private String code;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 类型 有值为app登录,无需密码
|
||||||
|
*/
|
||||||
|
private String uuid;
|
||||||
|
|
||||||
public String getType() {
|
public String getType() {
|
||||||
return type;
|
return type;
|
||||||
}
|
}
|
||||||
|
|
@ -65,4 +72,19 @@ public class LoginBody
|
||||||
this.jwtToken = jwtToken;
|
this.jwtToken = jwtToken;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public String getCode() {
|
||||||
|
return code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCode(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getUuid() {
|
||||||
|
return uuid;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setUuid(String uuid) {
|
||||||
|
this.uuid = uuid;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -64,14 +64,7 @@ public class AuthFilter implements GlobalFilter, Ordered
|
||||||
return chain.filter(exchange);
|
return chain.filter(exchange);
|
||||||
}
|
}
|
||||||
String token = getToken(request);
|
String token = getToken(request);
|
||||||
// 获取token中的用户ID
|
|
||||||
String userId = JwtUtils.getUserId(token);
|
|
||||||
// 获取用户当前有效的token
|
|
||||||
String currentToken = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + userId);
|
|
||||||
// 如果当前token和缓存中的token不一致,说明已被挤下线
|
|
||||||
if (currentToken == null || !currentToken.equals(token)) {
|
|
||||||
return unauthorizedResponse(exchange,"您的账号已在其他设备登录");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (StringUtils.isEmpty(token) )
|
if (StringUtils.isEmpty(token) )
|
||||||
{
|
{
|
||||||
|
|
@ -94,7 +87,14 @@ public class AuthFilter implements GlobalFilter, Ordered
|
||||||
{
|
{
|
||||||
return unauthorizedResponse(exchange, "令牌验证失败");
|
return unauthorizedResponse(exchange, "令牌验证失败");
|
||||||
}
|
}
|
||||||
|
// 获取token中的用户ID
|
||||||
|
String userId = JwtUtils.getUserId(token);
|
||||||
|
// 获取用户当前有效的token
|
||||||
|
String currentToken = redisService.getCacheObject(CacheConstants.LOGIN_TOKEN_KEY + userId);
|
||||||
|
// 如果当前token和缓存中的token不一致,说明已被挤下线
|
||||||
|
if (currentToken == null || !currentToken.equals(userkey)) {
|
||||||
|
return unauthorizedResponse(exchange,"您的账号已在其他设备登录");
|
||||||
|
}
|
||||||
// 设置用户信息到请求
|
// 设置用户信息到请求
|
||||||
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
|
addHeader(mutate, SecurityConstants.USER_KEY, userkey);
|
||||||
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
|
addHeader(mutate, SecurityConstants.DETAILS_USER_ID, userid);
|
||||||
|
|
|
||||||
|
|
@ -10,13 +10,24 @@ body {
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
#content{
|
#content {
|
||||||
width: 19%;
|
width: 19%;
|
||||||
height: 37%;
|
/*height: 37%;*/
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
align-content: center;
|
||||||
margin-top: 15.5%;
|
margin-top: 15.5%;
|
||||||
margin-left: 57%;
|
margin-left: 57%;
|
||||||
}
|
}
|
||||||
.title{
|
|
||||||
|
.common-box {
|
||||||
|
height: 42px;
|
||||||
|
display: flex;
|
||||||
|
align-items: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.title {
|
||||||
color: #000;
|
color: #000;
|
||||||
font-size: 30px;
|
font-size: 30px;
|
||||||
font-family: "微软雅黑";
|
font-family: "微软雅黑";
|
||||||
|
|
@ -24,37 +35,45 @@ body {
|
||||||
letter-spacing: 10px;
|
letter-spacing: 10px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
.content{
|
|
||||||
|
.content {
|
||||||
height: 35%;
|
height: 35%;
|
||||||
margin-top: 13%;
|
margin-top: 13%;
|
||||||
}
|
}
|
||||||
.phoneDiv{
|
|
||||||
height: 35%;
|
.phoneDiv, .codeDiv, .pwdDiv {
|
||||||
background-color: rgba(255,255,255,0.1);
|
height: 40px;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
.phoneDiv>div{
|
|
||||||
|
.phoneDiv > div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
.phoneDiv>.title{
|
|
||||||
|
.phoneDiv > .title {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 60%;
|
height: 25px;
|
||||||
width: 25px;
|
width: 25px;
|
||||||
background: url(../img/userName.png) no-repeat;
|
background: url(../img/userName.png) no-repeat;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
margin-top: 2%;
|
/*margin-top: 2%;*/
|
||||||
margin-left: 2%;
|
/*margin-left: 2%;*/
|
||||||
float: left;
|
/*float: left;*/
|
||||||
|
margin-right: 2%;
|
||||||
}
|
}
|
||||||
#phoneDiv{
|
|
||||||
width: 80%;
|
#phoneDiv {
|
||||||
|
/*width: 80%;*/
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-left: 3%;
|
margin-left: 3%;
|
||||||
float: left;
|
/*float: left;*/
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
#username{
|
|
||||||
|
#username {
|
||||||
height: 95%;
|
height: 95%;
|
||||||
width: 97%;
|
width: 97%;
|
||||||
background-color: rgba(229,235,241,1);
|
background-color: rgba(229, 235, 241, 1);
|
||||||
border: 0;
|
border: 0;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
@ -62,55 +81,116 @@ body {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.pwdDiv {
|
||||||
|
/*height: 35%;*/
|
||||||
.pwdDiv{
|
height: 40px;
|
||||||
height: 35%;
|
|
||||||
margin-top: 9%;
|
margin-top: 9%;
|
||||||
background-color: rgba(255,255,255,0.1);
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
}
|
}
|
||||||
.pwdDiv>div{
|
|
||||||
|
.pwdDiv > div {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
}
|
}
|
||||||
.pwdDiv>.title{
|
|
||||||
|
.pwdDiv > .title {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
height: 60%;
|
height: 25px;
|
||||||
width: 25px;
|
width: 25px;
|
||||||
background: url(../img/pwd.png) no-repeat;
|
background: url(../img/pwd.png) no-repeat;
|
||||||
background-size: 100% 100%;
|
background-size: 100% 100%;
|
||||||
margin-top: 2%;
|
/*margin-top: 2%;*/
|
||||||
margin-left: 2%;
|
/*margin-left: 2%;*/
|
||||||
float: left;
|
/*float: left;*/
|
||||||
|
margin-right: 2%;
|
||||||
}
|
}
|
||||||
#pwdDiv{
|
|
||||||
width: 80%;
|
#pwdDiv {
|
||||||
|
/*width: 80%;*/
|
||||||
height: 100%;
|
height: 100%;
|
||||||
margin-left: 3%;
|
margin-left: 3%;
|
||||||
float: left;
|
/*float: left;*/
|
||||||
|
flex: 1;
|
||||||
}
|
}
|
||||||
#password{
|
|
||||||
|
.codeDiv {
|
||||||
|
/*height: 35%;*/
|
||||||
|
height: 40px;
|
||||||
|
margin-top: 9%;
|
||||||
|
background-color: rgba(255, 255, 255, 0.1);
|
||||||
|
}
|
||||||
|
|
||||||
|
.codeDiv > div {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.codeDiv > .title {
|
||||||
|
display: inline-block;
|
||||||
|
height: 25px;
|
||||||
|
width: 25px;
|
||||||
|
background: url(../img/pwd.png) no-repeat;
|
||||||
|
background-size: 100% 100%;
|
||||||
|
/*margin-top: 2%;*/
|
||||||
|
/*margin-left: 2%;*/
|
||||||
|
/*float: left;*/
|
||||||
|
margin-right: 2%;
|
||||||
|
}
|
||||||
|
|
||||||
|
#codeDiv {
|
||||||
|
|
||||||
|
/*width: 80%;*/
|
||||||
|
height: 100%;
|
||||||
|
margin-left: 3%;
|
||||||
|
/*float: left;*/
|
||||||
|
flex: 1;
|
||||||
|
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
#code-img {
|
||||||
|
height: 40px;
|
||||||
|
width: 120px;
|
||||||
|
object-fit: cover;
|
||||||
|
cursor:pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
#password {
|
||||||
height: 95%;
|
height: 95%;
|
||||||
width: 97%;
|
width: 97%;
|
||||||
background-color: rgba(229,235,241,1);
|
background-color: rgba(229, 235, 241, 1);
|
||||||
border: 0;
|
border: 0;
|
||||||
outline: 0;
|
outline: 0;
|
||||||
float: left;
|
float: left;
|
||||||
color: #000;
|
color: #000;
|
||||||
}
|
}
|
||||||
.func{
|
|
||||||
|
#code {
|
||||||
|
height: 95%;
|
||||||
|
/*width: 97%;*/
|
||||||
|
background-color: rgba(229, 235, 241, 1);
|
||||||
|
border: 0;
|
||||||
|
outline: 0;
|
||||||
|
/*float: left;*/
|
||||||
|
color: #000;
|
||||||
|
flex: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
.func {
|
||||||
height: 7%;
|
height: 7%;
|
||||||
margin-top: 4%;
|
margin-top: 4%;
|
||||||
|
display: flex;
|
||||||
}
|
}
|
||||||
.func span:last-child{
|
|
||||||
|
.func span:last-child {
|
||||||
color: #00367A;
|
color: #00367A;
|
||||||
font-size: 13px;
|
font-size: 13px;
|
||||||
font-family: '微软雅黑';
|
font-family: '微软雅黑';
|
||||||
margin-left: 64%;
|
margin-left: 64%;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
#login{
|
|
||||||
|
#login {
|
||||||
height: 12.5%;
|
height: 12.5%;
|
||||||
margin-top: 15%;
|
margin-top: 10%;
|
||||||
background-color: #0857ba;
|
background-color: #0857ba;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
line-height: 20px;
|
line-height: 20px;
|
||||||
|
|
@ -120,10 +200,11 @@ body {
|
||||||
line-height: 41px;
|
line-height: 41px;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
#login:hover{
|
|
||||||
background-color: rgba(8,87,186,0.5);
|
#login:hover {
|
||||||
|
background-color: rgba(8, 87, 186, 0.5);
|
||||||
}
|
}
|
||||||
|
|
||||||
input::-webkit-input-placeholder{
|
input::-webkit-input-placeholder {
|
||||||
color: rgba(152,167,191,0.5);
|
color: rgba(152, 167, 191, 0.5);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,41 +1,49 @@
|
||||||
<!DOCTYPE html>
|
<!DOCTYPE html>
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||||
<meta http-equiv="Pragma" content="no-cache">
|
<meta http-equiv="Pragma" content="no-cache">
|
||||||
<meta http-equiv="Cache-Control" content="no-cache">
|
<meta http-equiv="Cache-Control" content="no-cache">
|
||||||
<meta http-equiv="Expires" content="0">
|
<meta http-equiv="Expires" content="0">
|
||||||
<title>登录</title>
|
<title>登录</title>
|
||||||
<link href="css/login.css" type="text/css" rel="stylesheet">
|
<link href="css/login.css" type="text/css" rel="stylesheet">
|
||||||
</head>
|
</head>
|
||||||
<body id="allPage">
|
<body id="allPage">
|
||||||
|
|
||||||
<div id="content" >
|
<div id="content">
|
||||||
<div class="title">实名制管理系统</div>
|
<div class="title">实名制管理系统</div>
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<div class="phoneDiv">
|
<div class="common-box phoneDiv">
|
||||||
<div class="title"></div>
|
<div class="title"></div>
|
||||||
<div id="phoneDiv">
|
<div id="phoneDiv">
|
||||||
<input id="username" name="username" type="text" placeholder="手机号"/>
|
<input id="username" name="username" type="text" placeholder="手机号"/>
|
||||||
<input id="jwtToken" hidden/>
|
<input id="jwtToken" hidden/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="pwdDiv">
|
<div class="common-box pwdDiv">
|
||||||
<div class="title"></div>
|
<div class="title"></div>
|
||||||
<div id="pwdDiv">
|
<div id="pwdDiv">
|
||||||
<input id="password" name="password" type="password" placeholder="密码"/>
|
<input id="password" name="password" type="password" placeholder="密码"/>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<div class="common-box codeDiv">
|
||||||
|
<div class="title"></div>
|
||||||
|
<div id="codeDiv">
|
||||||
|
<input id="code" name="code" type="text" placeholder="验证码"/>
|
||||||
|
<img name="yzm" id="code-img">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div class="func">
|
<div class="func">
|
||||||
<input id="jzpwd" type="checkbox" /><span style="color: #00367A; font-size: 13px; font-family: '微软雅黑'; ">记住密码</span>
|
<input id="jzpwd" type="checkbox"/><span
|
||||||
<span onclick="forgetPwd()" style="color: #00367A; font-size: 13px; font-family: '微软雅黑'; ">忘记密码</span>
|
style="color: #00367A; font-size: 13px; font-family: '微软雅黑'; ">记住密码</span>
|
||||||
</div>
|
<span onclick="forgetPwd()" style="color: #00367A; font-size: 13px; font-family: '微软雅黑'; ">忘记密码</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
<div onclick="login(this)" id="login">登录</div>
|
<div onclick="login(this)" id="login">登录</div>
|
||||||
<span id="info" style="color: red"></span>
|
<span id="info" style="color: red"></span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
<script src="js/libs/jquery-3.6.0.js"></script>
|
<script src="js/libs/jquery-3.6.0.js"></script>
|
||||||
|
|
@ -43,225 +51,251 @@
|
||||||
<script src="js/Rsa.js"></script>
|
<script src="js/Rsa.js"></script>
|
||||||
<script type="text/javascript" src="./layui/layui.js"></script>
|
<script type="text/javascript" src="./layui/layui.js"></script>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
layui.use([ 'layer' ], function() {
|
layui.use(['layer'], function () {
|
||||||
var layer = layui.layer;
|
var layer = layui.layer;
|
||||||
var userName = localStorage.getItem("userName");//用户名
|
var userName = localStorage.getItem("userName");//用户名
|
||||||
var password = localStorage.getItem("password");//密码
|
var password = localStorage.getItem("password");//密码
|
||||||
var jzpwd = localStorage.getItem("jzpwd");//是否记住密码
|
var jzpwd = localStorage.getItem("jzpwd");//是否记住密码
|
||||||
|
|
||||||
if(jzpwd != null && jzpwd == "true"){
|
if (jzpwd != null && jzpwd == "true") {
|
||||||
$("#username").val(userName);
|
$("#username").val(userName);
|
||||||
$("#password").val(password);
|
$("#password").val(password);
|
||||||
}
|
}
|
||||||
//回车登录,
|
//回车登录,
|
||||||
enterBtn();
|
enterBtn();
|
||||||
|
|
||||||
//禁用 F12、鼠标右键
|
//禁用 F12、鼠标右键
|
||||||
// disabledReviewElement();
|
// disabledReviewElement();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
if (top != self) {
|
||||||
|
parent.location.href = '/login.html';
|
||||||
|
}
|
||||||
if (top != self) {
|
var uuid=null;
|
||||||
parent.location.href = '/login.html';
|
var token = localStorage.getItem("smz-token");
|
||||||
}
|
if (token != null && token.trim().length != 0) {
|
||||||
|
$.ajax({
|
||||||
var token = localStorage.getItem("smz-token");
|
type: 'get',
|
||||||
if (token != null && token.trim().length != 0) {
|
url: ctxPath + '/users/current?token=' + token,
|
||||||
$.ajax({
|
success: function (data) {
|
||||||
type : 'get',
|
if (data != '') {
|
||||||
url : ctxPath + '/users/current?token=' + token,
|
location.href = ctxPath + '/index.html';
|
||||||
success : function(data) {
|
}
|
||||||
if(data != ''){
|
},
|
||||||
location.href = ctxPath + '/index.html';
|
error: function (xhr, textStatus, errorThrown) {
|
||||||
}
|
var msg = xhr.responseText;
|
||||||
},
|
var response = JSON.parse(msg);
|
||||||
error : function(xhr, textStatus, errorThrown) {
|
var code = response.code;
|
||||||
var msg = xhr.responseText;
|
var message = response.message;
|
||||||
var response = JSON.parse(msg);
|
if (code == 401) {
|
||||||
var code = response.code;
|
localStorage.removeItem("smz-token");
|
||||||
var message = response.message;
|
}
|
||||||
if (code == 401) {
|
}
|
||||||
localStorage.removeItem("smz-token");
|
});
|
||||||
}
|
}
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
//回车登录,
|
//回车登录,
|
||||||
function enterBtn(){
|
function enterBtn() {
|
||||||
fastLogin();
|
fastLogin();
|
||||||
}
|
}
|
||||||
function login(obj) {
|
|
||||||
$(obj).attr("disabled", true);
|
|
||||||
var username = $.trim($('#username').val());
|
|
||||||
var password = $.trim($('#password').val());
|
|
||||||
var jwtToken = $.trim($('#jwtToken').val());
|
|
||||||
var jzpwd = $("#jzpwd").prop("checked"); // 是否记住密码
|
|
||||||
if (username == "" || password == "") {
|
|
||||||
$("#info").html('手机号或者密码不能为空');
|
|
||||||
$(obj).attr("disabled", false);
|
|
||||||
} else {
|
|
||||||
$.ajax({
|
|
||||||
type : 'post',
|
|
||||||
contentType : "application/json; charset=utf-8",
|
|
||||||
url : DATA_URL + '/auth/login',
|
|
||||||
data : JSON.stringify({
|
|
||||||
"username" : encryptRsa(username),
|
|
||||||
"password" : encryptRsa(password),
|
|
||||||
"jwtToken" : jwtToken
|
|
||||||
}),
|
|
||||||
success : function(data) {
|
|
||||||
if(data.code == '200'){
|
|
||||||
|
|
||||||
let roleLevel = data.data.loginUser.sysUser.roleLevel;
|
function login(obj) {
|
||||||
console.log(data)
|
$(obj).attr("disabled", true);
|
||||||
const idNumber = decryptRsa(data.data.loginUser.sysUser.idNumber);
|
var username = $.trim($('#username').val());
|
||||||
// 4. 解密
|
var password = $.trim($('#password').val());
|
||||||
const phonenumber = decryptRsa(data.data.loginUser.sysUser.phonenumber);
|
var jwtToken = $.trim($('#jwtToken').val());
|
||||||
// if(roleLevel != '5'){
|
var code = $.trim($('#code').val());
|
||||||
localStorage.setItem("smz-token", data.data.access_token);
|
var jzpwd = $("#jzpwd").prop("checked"); // 是否记住密码
|
||||||
//保存用户名密码
|
if (username == "" || password == "" || code == "") {
|
||||||
localStorage.setItem("userName", username);
|
$("#info").html('手机号或者密码或者验证码不能为空');
|
||||||
localStorage.setItem("password", password);
|
$(obj).attr("disabled", false);
|
||||||
//保存登录人id
|
} else {
|
||||||
localStorage.setItem("userId", data.data.loginUser.userid);
|
$.ajax({
|
||||||
//保存登录人身份证
|
type: 'post',
|
||||||
localStorage.setItem("userIdNumber", idNumber);
|
contentType: "application/json; charset=utf-8",
|
||||||
//保存登录人手机号
|
url: DATA_URL + '/auth/login',
|
||||||
localStorage.setItem("phonenumber", phonenumber);
|
data: JSON.stringify({
|
||||||
//角色等级
|
"username": encryptRsa(username),
|
||||||
localStorage.setItem("roleLevel", roleLevel);
|
"password": encryptRsa(password),
|
||||||
//是否记录密码
|
"jwtToken": jwtToken,
|
||||||
localStorage.setItem("jzpwd", jzpwd);
|
'code': code,
|
||||||
//验证密码强度
|
"uuid":uuid
|
||||||
var flag = checkPwd(password);
|
|
||||||
//密码强度过低
|
|
||||||
if(flag){
|
|
||||||
//密码强度符合规则
|
|
||||||
location.href = ctxPath + '/index.html';
|
|
||||||
}else{
|
|
||||||
var msg = "您的密码复杂度太低!密码中必须包含【大小字母】、【数字】、【特殊字符】,请您尽快去修改密码。";
|
|
||||||
layer.alert(msg, { icon: 0 }, function () {
|
|
||||||
location.href = ctxPath + '/index.html';
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
// }else{
|
}),
|
||||||
// $("#info").html("施工人员级权限无法登录");
|
success: function (data) {
|
||||||
// $(obj).attr("disabled", false);
|
if (data.code == '200') {
|
||||||
// }
|
|
||||||
}else{
|
|
||||||
$("#info").html(data.msg);
|
|
||||||
$(obj).attr("disabled", false);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
error : function(xhr, textStatus, errorThrown) {
|
|
||||||
var msg = xhr.responseText;
|
|
||||||
var response = JSON.parse(msg);
|
|
||||||
$("#info").html(response.message);
|
|
||||||
$(obj).attr("disabled", false);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}
|
let roleLevel = data.data.loginUser.sysUser.roleLevel;
|
||||||
}
|
console.log(data)
|
||||||
|
const idNumber = decryptRsa(data.data.loginUser.sysUser.idNumber);
|
||||||
|
// 4. 解密
|
||||||
|
const phonenumber = decryptRsa(data.data.loginUser.sysUser.phonenumber);
|
||||||
|
// if(roleLevel != '5'){
|
||||||
|
localStorage.setItem("smz-token", data.data.access_token);
|
||||||
|
//保存用户名密码
|
||||||
|
localStorage.setItem("userName", username);
|
||||||
|
localStorage.setItem("password", password);
|
||||||
|
//保存登录人id
|
||||||
|
localStorage.setItem("userId", data.data.loginUser.userid);
|
||||||
|
//保存登录人身份证
|
||||||
|
localStorage.setItem("userIdNumber", idNumber);
|
||||||
|
//保存登录人手机号
|
||||||
|
localStorage.setItem("phonenumber", phonenumber);
|
||||||
|
//角色等级
|
||||||
|
localStorage.setItem("roleLevel", roleLevel);
|
||||||
|
//是否记录密码
|
||||||
|
localStorage.setItem("jzpwd", jzpwd);
|
||||||
|
//验证密码强度
|
||||||
|
var flag = checkPwd(password);
|
||||||
|
//密码强度过低
|
||||||
|
if (flag) {
|
||||||
|
//密码强度符合规则
|
||||||
|
location.href = ctxPath + '/index.html';
|
||||||
|
} else {
|
||||||
|
var msg = "您的密码复杂度太低!密码中必须包含【大小字母】、【数字】、【特殊字符】,请您尽快去修改密码。";
|
||||||
|
layer.alert(msg, {icon: 0}, function () {
|
||||||
|
location.href = ctxPath + '/index.html';
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
//验证密码强度
|
// }else{
|
||||||
function checkPwd(password) {
|
// $("#info").html("施工人员级权限无法登录");
|
||||||
var flag = true;
|
// $(obj).attr("disabled", false);
|
||||||
if (password != null) {
|
// }
|
||||||
var regex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}');
|
} else {
|
||||||
if (!regex.test(password)) {
|
$("#info").html(data.msg);
|
||||||
flag = false;
|
$(obj).attr("disabled", false);
|
||||||
}
|
getCodeImgFun();
|
||||||
}
|
}
|
||||||
return flag;
|
},
|
||||||
}
|
error: function (xhr, textStatus, errorThrown) {
|
||||||
|
var msg = xhr.responseText;
|
||||||
|
var response = JSON.parse(msg);
|
||||||
|
$("#info").html(response.message);
|
||||||
|
$(obj).attr("disabled", false);
|
||||||
|
getCodeImgFun();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
//忘记密码
|
}
|
||||||
function forgetPwd(){
|
}
|
||||||
location.href = "updPwd.html";
|
|
||||||
}
|
|
||||||
|
|
||||||
function fastLogin(){
|
//验证密码强度
|
||||||
var jwtToken=GetQueryString("token");
|
function checkPwd(password) {
|
||||||
console.log(jwtToken);
|
var flag = true;
|
||||||
if(jwtToken==null||jwtToken==undefined){
|
if (password != null) {
|
||||||
$(document).keyup(function(event){
|
var regex = new RegExp('(?=.*[0-9])(?=.*[A-Z])(?=.*[a-z])(?=.*[^a-zA-Z0-9]).{8,20}');
|
||||||
if(event.keyCode ==13){
|
if (!regex.test(password)) {
|
||||||
login($("#login"));
|
flag = false;
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
return;
|
return flag;
|
||||||
}else{
|
}
|
||||||
$("#content").css("display","none");
|
|
||||||
// layer.open({
|
|
||||||
// type: 1,
|
|
||||||
// title: '加载数据提示',
|
|
||||||
// area: ['70%', '70%'], // 设置宽度和高度
|
|
||||||
// content: `<div style="width: 100%;height: 100%;text-align: center;display: flex;justify-content: center">正在加载数据中</div>`,
|
|
||||||
// offset: 'auto', // 将内容居中
|
|
||||||
// });
|
|
||||||
layer.msg('自动登录中,请稍后。。。',{
|
|
||||||
icon:16,
|
|
||||||
shade: [0.8, '#393D49'],
|
|
||||||
time:5000
|
|
||||||
});
|
|
||||||
}
|
|
||||||
var url = ctxPath+"/auth/getTokenKey?jwtToken="+jwtToken;
|
|
||||||
$.ajax({
|
|
||||||
type : "GET",
|
|
||||||
contentType: "application/json;charset=UTF-8",
|
|
||||||
url : url,
|
|
||||||
success : function(result) {
|
|
||||||
if(result !== "miss"){
|
|
||||||
$('#username').val(result);
|
|
||||||
$('#jwtToken').val(jwtToken);
|
|
||||||
$('#password').val("edsa12fasf@das");
|
|
||||||
login();
|
|
||||||
}else{
|
|
||||||
console.log("jwtToken解析错误");
|
|
||||||
}
|
|
||||||
},
|
|
||||||
//请求失败,包含具体的错误信息
|
|
||||||
error : function(e){
|
|
||||||
console.log(e.status);
|
|
||||||
console.log(e.responseText);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetQueryString(name){
|
//忘记密码
|
||||||
var reg = new RegExp("(^|&)"+name+"=([^&]*)(&|$)");
|
function forgetPwd() {
|
||||||
var r = window.location.search.substr(1).match(reg);
|
location.href = "updPwd.html";
|
||||||
if(r!=null)return unescape(r[2]); return null;
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//禁用 F12、鼠标右键
|
function fastLogin() {
|
||||||
function disabledReviewElement() {
|
var jwtToken = GetQueryString("token");
|
||||||
document.onkeydown = function(e) {
|
console.log(jwtToken);
|
||||||
if(e.keyCode == 123) {
|
if (jwtToken == null || jwtToken == undefined) {
|
||||||
return false;
|
$(document).keyup(function (event) {
|
||||||
}
|
if (event.keyCode == 13) {
|
||||||
if(e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
|
login($("#login"));
|
||||||
return false;
|
}
|
||||||
}
|
});
|
||||||
if(e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
|
return;
|
||||||
return false;
|
} else {
|
||||||
}
|
$("#content").css("display", "none");
|
||||||
if(e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
|
// layer.open({
|
||||||
return false;
|
// type: 1,
|
||||||
}
|
// title: '加载数据提示',
|
||||||
if(e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
|
// area: ['70%', '70%'], // 设置宽度和高度
|
||||||
return false;
|
// content: `<div style="width: 100%;height: 100%;text-align: center;display: flex;justify-content: center">正在加载数据中</div>`,
|
||||||
}
|
// offset: 'auto', // 将内容居中
|
||||||
}
|
// });
|
||||||
document.addEventListener('contextmenu', function (event) {
|
layer.msg('自动登录中,请稍后。。。', {
|
||||||
event.preventDefault()
|
icon: 16,
|
||||||
})
|
shade: [0.8, '#393D49'],
|
||||||
}
|
time: 5000
|
||||||
|
});
|
||||||
|
}
|
||||||
|
var url = ctxPath + "/auth/getTokenKey?jwtToken=" + jwtToken;
|
||||||
|
$.ajax({
|
||||||
|
type: "GET",
|
||||||
|
contentType: "application/json;charset=UTF-8",
|
||||||
|
url: url,
|
||||||
|
success: function (result) {
|
||||||
|
if (result !== "miss") {
|
||||||
|
$('#username').val(result);
|
||||||
|
$('#jwtToken').val(jwtToken);
|
||||||
|
$('#password').val("edsa12fasf@das");
|
||||||
|
login();
|
||||||
|
} else {
|
||||||
|
console.log("jwtToken解析错误");
|
||||||
|
}
|
||||||
|
},
|
||||||
|
//请求失败,包含具体的错误信息
|
||||||
|
error: function (e) {
|
||||||
|
console.log(e.status);
|
||||||
|
console.log(e.responseText);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function GetQueryString(name) {
|
||||||
|
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
|
||||||
|
var r = window.location.search.substr(1).match(reg);
|
||||||
|
if (r != null) return unescape(r[2]);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
//禁用 F12、鼠标右键
|
||||||
|
function disabledReviewElement() {
|
||||||
|
document.onkeydown = function (e) {
|
||||||
|
if (e.keyCode == 123) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.ctrlKey && e.shiftKey && e.keyCode == 'I'.charCodeAt(0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.ctrlKey && e.shiftKey && e.keyCode == 'C'.charCodeAt(0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.ctrlKey && e.shiftKey && e.keyCode == 'J'.charCodeAt(0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (e.ctrlKey && e.keyCode == 'U'.charCodeAt(0)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.addEventListener('contextmenu', function (event) {
|
||||||
|
event.preventDefault()
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
// 获取图形验证码
|
||||||
|
function getCodeImgFun() {
|
||||||
|
$.ajax({
|
||||||
|
type: 'get',
|
||||||
|
url: DATA_URL + '/code',
|
||||||
|
async: false,
|
||||||
|
success: function (data) {
|
||||||
|
console.log(data, '获取的验证码')
|
||||||
|
|
||||||
|
$('#code-img').attr('src', `data:image/gif;base64,${data.img}`)
|
||||||
|
uuid = data.uuid;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getCodeImgFun()
|
||||||
|
|
||||||
|
$('#code-img').click(() => {
|
||||||
|
getCodeImgFun()
|
||||||
|
})
|
||||||
</script>
|
</script>
|
||||||
</html>
|
</html>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue