main
黄海 3 years ago
parent a69b10bca3
commit 758566f119

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

@ -0,0 +1,28 @@
此程序占25分这25分里面有评委会的10分有群众15分。
评委会得分= 1.0 * 评委会投票人数/评委会总人数 *10
群众得分= 1.0 * 群众投票人数/群从总人数 *15
投一票是一票,统计票数即可
群众可投票人数30人
评审小组可投票人数7人
投票规则:
高级是5选2中级是3选2.

@ -0,0 +1,173 @@
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<meta name="renderer" content="webkit|ie-comp|ie-stand">
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
<title>长春市教育技术装备与信息中心职称评审系统</title>
<meta name="viewport" content="width=device-width,initial-scale=1,user-scalable=no"/>
<!-- 手机端禁止缩放 -->
<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport"/>
<meta name="keywords" content="长春市教育技术装备与信息中心职称评审系统">
<!--关键词,5个左右,单个8汉字以内-->
<meta name="description" content="长春市教育技术装备与信息中心职称评审系统">
<!--网站描述-->
<!--自己的样式-->
<link href="css/public.css" rel="stylesheet" type="text/css"/>
<link href="css/SignIn.css" rel="stylesheet" type="text/css">
<script src="lib/jsencrypt.min.js"></script>
<script src="lib/jquery-3.6.0.min.js"></script>
<!--添加对公用函数库的引用-->
<!-- <script src="lib/common.js"></script>-->
</head>
<body>
<div class="all-content">
<div class="content clearfix">
<div class="left-img">
<img src="img/left-img.png">
</div>
<div class="right-content clearfix">
<div class="content-name">
<p style="font-size: 20px;font-weight: bolder">长春市教育技术装备与信息中心职称评审系统</p>
</div>
<form action="" method="post">
<div class="user-name">
<div class="user-name-li">
<img src="img/user-icon.png">
<input type="text" placeholder="用户名" name="loginName" id="usernameTxt">
</div>
</div>
<div class="password">
<div class="password-li">
<img src="img/pass-word.png">
<input type="password" autocomplete="off" placeholder="密码" name="password" id="passwordTxt">
</div>
</div>
<div class="vcode">
<div class="vcode-li">
<img src="img/v-code.png">
<input type="text" placeholder="验证码" autocomplete="off" name="captcha" id="captchaTxt">
<img class="vcode-img" id="userCaptchaImage" src="/FengHuang/loginPerson/getCaptcha"
alt="点击图片刷新校验码" style="cursor:pointer" onclick="javascript:refreshCaptcha()"/>
</div>
</div>
<input id="loginBtn" class="input-button" type="button" value="登&nbsp;&nbsp;&nbsp;录">
</form>
</div>
</div>
</div>
<div class="footer">
©版权所有&nbsp;&nbsp;2020-2022&nbsp;&nbsp;长春市教育局装备信息与技术中心<span class="padding-5">&nbsp;&nbsp;|&nbsp;&nbsp;</span><a
href="https://beian.miit.gov.cn/" target="_blank">吉ICP备20000186号-1</a>
</div>
<script>
$(function () {
$("#loginBtn").click(function () {
doLogin();
});
});
//刷新验证码
function refreshCaptcha() {
$("#userCaptchaImage").attr("src", "/FengHuang/loginPerson/getCaptcha?rnd=" + Math.random().toString().slice(-6));
}
$(document).keydown(function (event) {
if (event.keyCode === 13) {//回车键对应code值为13
doLogin();
}
});
function doLogin() {
var username = $("#usernameTxt").val();
var password = $("#passwordTxt").val();
var captcha = $("#captchaTxt").val();
if (username.length === 0 || password.length === 0) {
alert("用户名或密码不允许为空!")
return;
}
userLogin(username, password, captcha);
}
//用户名登录
function userLogin(username, password, captcha) {
var publicKey = "-----BEGIN PUBLIC KEY-----\MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCcd+0zTY9Gn94iqkQJTlxYnEnCeFsLkk0a7hoAvi2B74VzDVV3xH0ZO9RkXvo1SgCB+uzbEWdrgQkzTqyjfTtgOguu3OnkVxIMJF34ibchTY0LWHGxq1m2gLGuVVqrlu1LtdV0X7xo/5zc8Mr+46veWb86kSpqe6rOAm69WWo5GwIDAQAB\-----END PUBLIC KEY-----";
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
if (userLoginCheck(username, password, captcha)) {
$.ajax({
type: "POST",
dataType: "json",
url: "/FengHuang/loginPerson/touPiaodoLogin",
data: {
"username": username,
"password": encrypt.encrypt(password),
"captcha": captcha
},
async: false,
success: function (result) {
if (result.success) {
window.location.href = '/FengHuang/html/xxxx.html';
} else {
alert(result.msg);
refreshCaptcha();
}
}
});
}
}
//用户登录检查
function userLoginCheck(username, password, captcha) {
if (username == null || username == "") {
alert("用户名不允许为空!");
return false;
}
if (password == null || password == "") {
alert("密码不允许为空!");
return false;
}
if (captcha == null || captcha == "") {
alert("验证码不允许为空!");
return false;
}
return true;
}
//开启错误提示
function showError(error) {
$(".form-error").find("label").html(error);
$(".form-error").show();
}
//获取页面信息
function getPageInfo() {
$.ajax({
type: "POST",
dataType: "json",
url: "/FengHuang/global/getGlobalValueByKey",
data: {
"key": "title,copy_right"
},
async: false,
success: function (result) {
if (result.success) {
$("#system_name").html(result.title);
$("#copyright").html(result.copy_right);
$('title').html(result.title);
//存储csrf_token到本地存储器
//setCsrfLocalStorage(result);
}
}
});
}
</script>
</body>
</html>

@ -24,7 +24,7 @@ public class IndexController extends Controller {
@Before({GET.class})
public void index() {
redirect("/html/login.html");
redirect("/html/toupiao_login.html");
}

@ -18,6 +18,7 @@ import com.jfinal.ext.interceptor.POST;
import com.jfinal.kit.PathKit;
import com.jfinal.kit.PropKit;
import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Page;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.redis.Redis;
@ -26,6 +27,7 @@ import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;
@ -35,6 +37,143 @@ public class LoginPersonController extends Controller {
//实例化model
LoginPersonModel model = new LoginPersonModel();
@ActionApi(remark = "验证登录", summary = "验证登录", sort = 1)
@Params({
@Param(name = "username", remark = "用户名", required = true),
@Param(name = "password", remark = "密码", required = true),
@Param(name = "captcha", remark = "验证码", required = true)
})
public void touPiaodoLogin(String username, String password, String captcha) {
JSONObject resultJson = new JSONObject();
try {
if (StrKit.isBlank(captcha)) {
resultJson.put("success", false);
resultJson.put("msg", "验证码不能为空!");
renderJson(resultJson);
return;
}
if (getSession().getAttribute("captcha") == null) {
resultJson.put("success", false);
resultJson.put("msg", "在浏览器会话中没有检查到验证码,你的行为将会记录!");
renderJson(resultJson);
return;
}
String memory_captcha = getSession().getAttribute("captcha").toString().toLowerCase();
//验证码错误次数
String checkCodeKey = "Yzm_error_" + username;
int CheckCodeErrCnt = 4; //最多允许错几次 4+1
int CheckCodecntNum = 0; //错几次了
if (Redis.use().exists(checkCodeKey))
CheckCodecntNum = Integer.parseInt(Redis.use().get(checkCodeKey).toString());
if (CheckCodecntNum > CheckCodeErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "账号已被停用5分钟请稍后再试");
renderJson(resultJson);
return;
}
if (!memory_captcha.equals(captcha.toLowerCase())) {
CheckCodecntNum = 1;
if (Redis.use().exists(checkCodeKey))
CheckCodecntNum = Integer.parseInt(Redis.use().get(checkCodeKey).toString()) + CheckCodecntNum;
Redis.use().set(checkCodeKey, CheckCodecntNum);
Redis.use().expire(checkCodeKey, 60 * 5);
if (CheckCodecntNum == CheckCodeErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "验证码连续输入错误" + CheckCodecntNum + "次再错误一次将被封号5分钟");
renderJson(resultJson);
return;
}
if (CheckCodecntNum > CheckCodeErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "验证码连续输入错误5次账号被停用5分钟请稍后再试");
renderJson(resultJson);
return;
}
resultJson.put("success", false);
resultJson.put("msg", "验证码不正确!");
renderJson(resultJson);
return;
}
if (StrKit.isBlank(username)) {
resultJson.put("success", false);
resultJson.put("msg", "用户名不允许为空!");
renderJson(resultJson);
return;
}
if (StrKit.isBlank(password)) {
resultJson.put("success", false);
resultJson.put("msg", "密码不允许为空!");
renderJson(resultJson);
return;
}
//检查缓存中此账号错误了几次
String PassWordKey = "WrongPassWord_" + username;
int ErrCnt = 4; //最多允许错几次 4+1
int cntNum = 0; //错几次了
if (Redis.use().exists(PassWordKey)) cntNum = Integer.parseInt(Redis.use().get(PassWordKey).toString());
if (cntNum > ErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "账号被停用5分钟请稍后再试");
renderJson(resultJson);
return;
}
//与前端配合RSA通用加密解密
try {
password = RsaUtils.decryptDataOnJava(password, RsaUtils.PRIVATEKEY);
} catch (Exception err) {
password = "!@#$%^&&*^*&(*)(*_)^%^$%$^%$^%";
}
String sql = "select * from t_toupiao_toupiaoren where toupiaoren_tel=?";
List<Record> list = Db.find(sql, username);
if (list.size() == 0) {
resultJson.put("success", false);
resultJson.put("msg", "用户名或密码错误!");
renderJson(resultJson);
return;
}
if (!password.equals(username.substring(username.length()-6))) {
//扩展支持连续输入用户名密码错误停用账号5分钟功能 2022.06.07
cntNum = 1;
if (Redis.use().exists(PassWordKey))
cntNum = Integer.parseInt(Redis.use().get(PassWordKey).toString()) + cntNum;
Redis.use().set(PassWordKey, cntNum);
Redis.use().expire(PassWordKey, 60 * 5);
if (cntNum > ErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "密码连续输入" + (ErrCnt + 1) + "次全部错误账号将被停用5分钟");
renderJson(resultJson);
return;
}
if (cntNum == ErrCnt) {
resultJson.put("success", false);
resultJson.put("msg", "用户名或密码连续错误你还有1次机会再次错误后账号将被封掉5分钟");
renderJson(resultJson);
return;
}
resultJson.put("success", false);
resultJson.put("msg", "用户名或密码错误!");
renderJson(resultJson);
return;
}
//去掉限制
Redis.use().del(PassWordKey);
Redis.use().del(checkCodeKey);
CookieUtil.set(getResponse(), "toupiaoren_tel", username, false, true);
resultJson.put("success", true);
resultJson.put("toupiaoren_tel", username);
renderJson(resultJson);
} catch (Exception e) {
resultJson.put("success", false);
resultJson.put("msg", "登录异常!");
renderJson(resultJson);
}
}
@ActionApi(remark = "验证登录", summary = "验证登录", sort = 1)
@Params({
@Param(name = "username", remark = "用户名", required = true),

Loading…
Cancel
Save