Commit a31721b1 authored by 胡文斌's avatar 胡文斌

Merge remote-tracking branch 'origin/SZDAS_V2.0' into SZDAS_V2.0

# Conflicts: # src/main/resources/DBUpdate/DM_UpdateSQL.xml
parents 138684a1 336fa416
...@@ -116,6 +116,8 @@ public class IndexController extends Controller { ...@@ -116,6 +116,8 @@ public class IndexController extends Controller {
username = this.getPara("username"); username = this.getPara("username");
password = this.getPara("password"); password = this.getPara("password");
} }
//校验密码是否符合强度设置
String verify = password;
password = HashKit.sha256(password); password = HashKit.sha256(password);
User user = User.dao.template("getUser", username).findFirst(); User user = User.dao.template("getUser", username).findFirst();
if (user == null) { if (user == null) {
...@@ -259,8 +261,9 @@ public class IndexController extends Controller { ...@@ -259,8 +261,9 @@ public class IndexController extends Controller {
Redis.use().expire(username, 60 * 60 * 24); Redis.use().expire(username, 60 * 60 * 24);
}catch (Exception e) { }catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} }
this.renderJson(Ret.ok("token", jws).set("callback", callback)); Boolean aBoolean = userService.verifyPassword(verify);
this.renderJson(Ret.ok("token", jws).set("callback", callback).set("verify",aBoolean));
logService.saveAsLog("login", username, JwtInterceptor.getIpAddr(getRequest()), username + "登录" + app + "成功", app); logService.saveAsLog("login", username, JwtInterceptor.getIpAddr(getRequest()), username + "登录" + app + "成功", app);
/** /**
* 20200706 lidecai 将用户信息保存到Redis end * 20200706 lidecai 将用户信息保存到Redis end
...@@ -272,6 +275,35 @@ public class IndexController extends Controller { ...@@ -272,6 +275,35 @@ public class IndexController extends Controller {
} }
} }
/**
* @Description: 验证密码强度
* @authorAndDate: ChengYaqing create on 2020/10/30 10:38
* @return void
*/
public void verifyPassword() {
String password = getPara("password");
if(password==null||"".equals(password)||"null".equals(password)) {
renderJson(Ret.fail("msg","密码不能为空"));
return;
}
try {
password = decrypt(password);
} catch (Exception e1) {
e1.printStackTrace();
password = this.getPara("password");
}
try {
String verify = userService.verifyPasswordInfo(password);
if("".equals(verify)) {
renderJson(Ret.ok());
} else {
renderJson(Ret.fail("msg",verify));
}
} catch (Exception e) {
renderJson(Ret.fail("error",e.getMessage()));
}
}
// 密码正确时错误次数清零 // 密码正确时错误次数清零
private void setErrZero(User user) { private void setErrZero(User user) {
Db.update(Db.getSqlPara("updateForOk", Kv.by("id", user.getId()))); Db.update(Db.getSqlPara("updateForOk", Kv.by("id", user.getId())));
...@@ -473,4 +505,6 @@ public class IndexController extends Controller { ...@@ -473,4 +505,6 @@ public class IndexController extends Controller {
Redis.use().del(userName + "_INFO"); Redis.use().del(userName + "_INFO");
renderJson(Ret.ok()); renderJson(Ret.ok());
} }
} }
...@@ -11,6 +11,8 @@ import com.jfinal.kit.Kv; ...@@ -11,6 +11,8 @@ import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record; import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.tx.Tx; import com.jfinal.plugin.activerecord.tx.Tx;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class UserService { public class UserService {
...@@ -82,7 +84,7 @@ public class UserService { ...@@ -82,7 +84,7 @@ public class UserService {
* 判断用户是否有指定系统的权限 * 判断用户是否有指定系统的权限
* *
* @param userId * @param userId
* @param menuName * @param userId
* @return * @return
*/ */
public boolean checkUserSystemPermission(int userId, String systemType) { public boolean checkUserSystemPermission(int userId, String systemType) {
...@@ -177,5 +179,78 @@ public class UserService { ...@@ -177,5 +179,78 @@ public class UserService {
.findFirst(); .findFirst();
} }
/**
* @Description: 校验密码强度符合规范
* @authorAndDate: ChengYaqing create on 2020/10/30 10:23
* @return java.lang.Boolean
*/
public Boolean verifyPassword(String password) {
try {
String verify = verifyPasswordInfo(password);
if("".equals(verify)) {
return true;
} else {
return false;
}
} catch (Exception e) {
e.printStackTrace();
return false;
}
}
/**
* @Description: 校验密码强度
* @authorAndDate: ChengYaqing create on 2020/10/30 10:06
* @return java.lang.String
*/
public String verifyPasswordInfo(String password) {
try {
StringBuilder info = new StringBuilder();
//获取规则设置
Record strength = Db.findFirst(Db.getSql("getSetPassword"));
if(strength==null) {
return "";
}
Integer size = strength.getInt("lmin");
int length = password.length();
if(length < size) {
return "密码长度不能小于"+size;
}
if(length > 32) {
return "密码长度没必要大于32位";
}
String contain = strength.getStr("contain");
String number = ".*\\d+.*";
String low = ".*[a-z]+.*";
String up = ".*[A-Z]+.*";
String spe = ".*[ _`~!@#$%^&*()+=|{}':;',\\[\\].<>/?~!@#¥%……&*()——+|{}【】‘;:”“’。,、?]+.*";
if(contain.contains("数字")) {
Pattern p = Pattern.compile(number);
Matcher m = p.matcher(password);
if(!m.matches()) info.append("数字、");
} if (contain.contains("小写字母")) {
Pattern p = Pattern.compile(low);
Matcher m = p.matcher(password);
if(!m.matches()) info.append("小写字母、");
} if (contain.contains("大写字母")) {
Pattern p = Pattern.compile(up);
Matcher m = p.matcher(password);
if(!m.matches()) info.append("大写字母、");
} if (contain.contains("特殊字符")) {
Pattern p = Pattern.compile(spe);
Matcher m = p.matcher(password);
if(!m.matches()) info.append("特殊字符、");
}
if (info.length()==0) {
return "";
} else {
String verify = info.deleteCharAt(info.length() - 1).toString();
return "密码中缺少"+verify;
}
} catch (Exception e) {
e.printStackTrace();
throw e;
}
}
} }
...@@ -2057,8 +2057,8 @@ ...@@ -2057,8 +2057,8 @@
</version> </version>
<version edition="84" description="修改文件表"> <version edition="84" description="修改文件表">
<sql creator="chengYaqing" createDate="20200926" note="修改文件表"> <sql creator="chengYaqing" createDate="20200926" note="修改文件表">
alter table AS_FILE modify (file_code CLOB); alter table AS_FILE modify (file_code varchar2(255));
alter table AS_FILE_RECYLE (file_code CLOB); alter table AS_FILE_RECYLE modify (file_code varchar2(255));
</sql> </sql>
</version> </version>
...@@ -2141,70 +2141,197 @@ ...@@ -2141,70 +2141,197 @@
</sql> </sql>
</version> </version>
<version edition="90" description="创建年报设置表"> <version edition="90" description="创建年报设置表">
<sql creator="yangrifei" createDate="20201027" note="创建年报设置表"> <sql creator="yangrifei" createDate="20201027" note="创建年报设置表">
CREATE "AS_ANNUAL_SET" CREATE TABLE "AS_ANNUAL"
( (
"ID" INT NOT NULL, "ID" INT NOT NULL,
"CODE" INT, "ANNUAL_NAME" VARCHAR2(50),
"NUMBER" INT DEFAULT 0 NOT NULL, "CREAT_NAME" VARCHAR2(50),
"CONDITION" VARCHAR2(255), "CREAT_DATA" TIMESTAMP(6),
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ; "CODE" INT,
</sql> CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "AS_ANNUAL" IS '年报';
</sql>
</version> </version>
<version edition="91" description="创建档案备份离线备份表">
<sql creator="durui" createDate="20201028" note="创建档案备份离线备份表">
CREATE TABLE "AS_OFFLINE_BACKUP"
(
"ID" NUMBER(22,0) NOT NULL,
"TITLE" VARCHAR(64),
"CARRIER" VARCHAR2(100),
"PATH" VARCHAR2(100),
"SIZE" VARCHAR2(50),
"DETAILS" VARCHAR2(500),
"CAEATE_TIME" TIMESTAMP(6),
"CREATOR" VARCHAR2(40),
CLUSTER PRIMARY KEY("ID"),
UNIQUE("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
<version edition="90" description="创建四性检测表"> COMMENT ON TABLE "AS_OFFLINE_BACKUP" IS '离线备份表';
<sql creator="huwenbin" createDate="20201027" note="创建四性检测表"> COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."CAEATE_TIME" IS '备份时间';
CREATE TABLE "as_fourtest_execution" COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."CARRIER" IS '备份载体';
COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."CREATOR" IS '操作人';
COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."DETAILS" IS '备份详情';
COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."PATH" IS '备份路径';
COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."SIZE" IS '文件大小';
COMMENT ON COLUMN "AS_OFFLINE_BACKUP"."TITLE" IS '标题';
</sql>
</version>
<version edition="92" description="创建档案备份在线备份表">
<sql creator="durui" createDate="20201028" note="创建档案备份在线备份表">
CREATE TABLE "AS_ONLINE_BACKUP"
( (
"ID" NUMBER(9,0) NOT NULL, "ID" NUMBER(22,0) NOT NULL,
"SOLUTION_ID" NUMBER(9,0), "TITLE" VARCHAR(100),
"AJ_CONFIG" CLOB, "SERVER" VARCHAR(50),
"JN_CONFIG" CLOB, "PATH" VARCHAR(100),
"CREATOR" NUMBER(9,0), "SIZE" VARCHAR(20),
"NUMBER" VARCHAR(100),
"MODE" VARCHAR(10),
"STATE" VARCHAR(10),
"BACKUP_CREATE_TIME" TIMESTAMP(6),
"TIME_SPENT" VARCHAR(20),
"DEL_FLAG" VARCHAR(20),
"CREATOR" VARCHAR2(40),
"REMARKS" VARCHAR2(255),
"CREATE_TIME" TIMESTAMP(6), "CREATE_TIME" TIMESTAMP(6),
"HANDOVER_FILE_ID" NUMERIC(9,0), "LIBRARY_ID" VARCHAR2(500),
"DETECTION_STATUS" NUMBER(1,0), CLUSTER PRIMARY KEY("ID"),
"TITLE" VARCHAR2(120), UNIQUE("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
"UNZIP_PATH" VARCHAR2(8000),
"DETECTION_RESULT" CLOB,
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "AS_FOURTEST_EXECUTION" IS '四性检测方案执行';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."AJ_CONFIG" IS '案卷配置';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."CREATOR" IS '创建者';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."DETECTION_RESULT" IS '检测结果';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."DETECTION_STATUS" IS '检测状态。0:检测中,1:检测成功,2:检测失败,3:人工检测中,';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."HANDOVER_FILE_ID" IS '移交包数据表id';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."JN_CONFIG" IS '卷内配置';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."SOLUTION_ID" IS '方案id';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."TITLE" IS '检测标题';
COMMENT ON COLUMN "AS_FOURTEST_EXECUTION"."UNZIP_PATH" IS '压缩包解压路径';
COMMENT ON TABLE "AS_ONLINE_BACKUP" IS '在线备份表';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."BACKUP_CREATE_TIME" IS '备份开始时间';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."CREATOR" IS '操作人';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."DEL_FLAG" IS '删除标识';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."LIBRARY_ID" IS '档案门类ID';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."MODE" IS '备份方式';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."NUMBER" IS '备份文件数量';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."PATH" IS '备份路径';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."REMARKS" IS '备注';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."SERVER" IS '备份服务器';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."SIZE" IS '备份文件大小';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."STATE" IS '备份状态';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."TIME_SPENT" IS '备份用时';
COMMENT ON COLUMN "AS_ONLINE_BACKUP"."TITLE" IS '标题';
</sql>
</version>
<version edition="93" description="创建档案备份在线备份记录表">
<sql creator="durui" createDate="20201028" note="创建档案备份在线备份记录表">
CREATE TABLE "AS_ONLINE_BACKUP_RECORD"
(
"ID" NUMBER(22,0) NOT NULL,
"ONLINE_BACKUP_ID" NUMBER(22,0),
"TITLE" VARCHAR(100),
"SERVER" VARCHAR(50),
"PATH" VARCHAR(100),
"SIZE" VARCHAR(20),
"NUMBER" VARCHAR(100),
"MODE" VARCHAR(10),
"STATE" VARCHAR(10),
"BACKUP_CREATE_TIME" TIMESTAMP(6),
"TIME_SPENT" VARCHAR(20),
"DEL_FLAG" VARCHAR(20),
"CREATOR" VARCHAR2(40),
"REMARKS" VARCHAR2(255),
"CREATE_TIME" TIMESTAMP(6),
CLUSTER PRIMARY KEY("ID"),
UNIQUE("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
CREATE TABLE "AS_FOURTEST_CONFIG" COMMENT ON TABLE "AS_ONLINE_BACKUP_RECORD" IS '在线备份记录表';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."BACKUP_CREATE_TIME" IS '备份开始时间';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."CREATOR" IS '操作人';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."DEL_FLAG" IS '删除标识';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."MODE" IS '备份方式';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."NUMBER" IS '备份文件数量';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."ONLINE_BACKUP_ID" IS '在线备份任务id';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."PATH" IS '备份路径';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."REMARKS" IS '备注';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."SERVER" IS '备份服务器';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."SIZE" IS '备份文件大小';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."STATE" IS '备份状态';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."TIME_SPENT" IS '备份用时';
COMMENT ON COLUMN "AS_ONLINE_BACKUP_RECORD"."TITLE" IS '标题';
</sql>
</version>
<version edition="94" description="创建档案备份在线备份配置表">
<sql creator="durui" createDate="20201028" note="创建档案备份在线备份配置表">
CREATE TABLE "AS_ONLINE_BACKUP_CONFIG"
( (
"ID" NUMBER(22,6) NOT NULL, "ID" NUMBER(22,0) NOT NULL,
"SOLUTION_ID" NUMBER(22,6) NOT NULL, "SERVER" VARCHAR(50),
"AJ_CONFIG" CLOB, "PATH" VARCHAR(100),
"MODE" VARCHAR(10),
"CREATOR" VARCHAR2(40),
"CREATE_TIME" TIMESTAMP(6), "CREATE_TIME" TIMESTAMP(6),
"CREATOR" NUMBER(9,0), "LIBRARY_ID" VARCHAR2(500),
"JN_CONFIG" CLOB, CLUSTER PRIMARY KEY("ID"),
"HANDOVER_FILE_ID" NUMBER(9,0), UNIQUE("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "AS_FOURTEST_CONFIG" IS '四性检测配置信息表'; COMMENT ON TABLE "AS_ONLINE_BACKUP_CONFIG" IS '在线备份记录表';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."AJ_CONFIG" IS '检测方案配置'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."CREATE_TIME" IS '创建时间';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."CREATE_TIME" IS '创建时间'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."CREATOR" IS '操作人';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."CREATOR" IS '创建人'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."LIBRARY_ID" IS '档案门类ID';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."ID" IS '主键id'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."MODE" IS '备份方式';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."JN_CONFIG" IS '卷内配置数据'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."PATH" IS '备份路径';
COMMENT ON COLUMN "AS_FOURTEST_CONFIG"."SOLUTION_ID" IS '检测方案id'; COMMENT ON COLUMN "AS_ONLINE_BACKUP_CONFIG"."SERVER" IS '备份服务器';
</sql>
</version>
<version edition="95" description="创建年报封面表">
<sql creator="yangrifei" createDate="20201028" note="创建年报封面表">
CREATE TABLE "AS_ANNUAL_COVER"
(
"ID" INT NOT NULL,
"UNIT_NAME" VARCHAR2(255),
"NAME" VARCHAR2(50),
"PRINCIPAL" VARCHAR2(50),
"FILL_NAME" VARCHAR2(50),
"AREA_CODE" VARCHAR2(50),
"TELEPHONE" VARCHAR2(50),
"EXTENSION" VARCHAR2(50),
"UNITADDRESS" VARCHAR2(255),
"UNITCATEGORY" VARCHAR2(255),
"EDITDATA" DATE,
"CREDITCODE" VARCHAR2(50),
"INSTITUTIONCODE" VARCHAR2(50),
"TYPE" VARCHAR2(50),
"POSTALCODE" VARCHAR2(50),
CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "AS_ANNUAL_COVER" IS '年报封面表';
</sql>
</version>
<version edition="96" description="创建年报配置表">
<sql creator="yangrifei" createDate="20201028" note="创建年报配置表">
CREATE TABLE "AS_ANNUAL_SET"
(
"ID" INT NOT NULL,
"CODE" INT,
"NUMBER" INT DEFAULT 0 NOT NULL,
"CONDITION" VARCHAR2(255),
NOT CLUSTER PRIMARY KEY("ID")) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "AS_ANNUAL_SET" IS '年报设置表';
</sql>
</version>
<version edition="97" description="创建密码强度设置表">
<sql creator="ChengYaqing" createDate="20201102" note="创建密码强度设置表">
CREATE TABLE "ARCHSER"."AS_SET_PASSWORD"
(
"ID" NUMBER(3,0),
"LMIN" NUMBER(3,0),
"CONTAIN" VARCHAR2(100)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON COLUMN "ARCHSER"."AS_SET_PASSWORD"."CONTAIN" IS '选取类型,集合';
COMMENT ON COLUMN "ARCHSER"."AS_SET_PASSWORD"."ID" IS '值为固定值1';
COMMENT ON COLUMN "ARCHSER"."AS_SET_PASSWORD"."LMIN" IS '密码最小长度,最长为32';
</sql>
</version>
<version edition="98" description="修改字段">
<sql creator="ChengYaqing" createDate="20201102" note="修改字段">
alter table AS_FILE modify SIGNATURE VARCHAR2(1000);
alter table AS_FILE_RECYLE modify SIGNATURE VARCHAR2(1000);
alter table AS_FILE add ECERT_SIGN VARCHAR2(255);
alter table AS_FILE_RECYLE add ECERT_SIGN VARCHAR2(255);
</sql> </sql>
</version> </version>
</update> </update>
\ No newline at end of file
...@@ -299,4 +299,8 @@ select * from AS_MENU where ID in ( ...@@ -299,4 +299,8 @@ select * from AS_MENU where ID in (
#end #end
#include("message.sql") #include("message.sql")
\ No newline at end of file
#sql("getSetPassword")
select * from AS_SET_PASSWORD where id = '1'
#end
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment