Commit 36ae69dc authored by 胡文斌's avatar 胡文斌

使用公共包方法

parent ea7930fa
...@@ -126,6 +126,11 @@ ...@@ -126,6 +126,11 @@
<artifactId>jfinal</artifactId> <artifactId>jfinal</artifactId>
<version>${jfinal.version}</version> <version>${jfinal.version}</version>
</dependency> </dependency>
<dependency>
<groupId>com.archser</groupId>
<artifactId>archser-commons</artifactId>
<version>1.2.2</version>
</dependency>
<!-- 东方通依赖 --> <!-- 东方通依赖 -->
<!-- <dependency> <!-- <dependency>
<groupId>io.swagger</groupId> <groupId>io.swagger</groupId>
......
package com.archser.aserver.common.config; package com.archser.aserver.common.config;
import com.alibaba.druid.filter.logging.Log4jFilter;
import com.alibaba.druid.filter.logging.LogFilter;
import com.alibaba.druid.filter.stat.StatFilter; import com.alibaba.druid.filter.stat.StatFilter;
import com.archser.aserver.common.config.plugins.DBUpgrade; import com.archser.aserver.common.config.plugins.DBUpgrade;
import com.archser.aserver.common.config.plugins.RedisConfig;
import com.archser.aserver.controller.*; import com.archser.aserver.controller.*;
import com.archser.aserver.interceptor.JwtInterceptor; import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.itask.GoodSync;
import com.archser.aserver.model._MappingKit; import com.archser.aserver.model._MappingKit;
import com.archser.aserver.util.SharedDisk; import com.archser.aserver.util.SharedDisk;
import com.archser.aserver.websocket.MessageWebSocket; import com.archser.aserver.websocket.MessageWebSocket;
import com.archser.commons.AppStartConfig;
import com.archser.plugin.redis.RedisConfig;
import com.jfinal.config.*; import com.jfinal.config.*;
import com.jfinal.ext.handler.RequestHandler; import com.jfinal.ext.handler.RequestHandler;
import com.jfinal.ext.handler.UrlSkipHandler; import com.jfinal.ext.handler.UrlSkipHandler;
import com.jfinal.ext.proxy.CglibProxyFactory; import com.jfinal.ext.proxy.CglibProxyFactory;
import com.jfinal.json.MixedJsonFactory; import com.jfinal.json.MixedJsonFactory;
import com.jfinal.kit.Kv;
import com.jfinal.kit.PathKit; import com.jfinal.kit.PathKit;
import com.jfinal.kit.Prop; import com.jfinal.kit.Prop;
import com.jfinal.kit.PropKit; import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin; import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory; import com.jfinal.plugin.activerecord.CaseInsensitiveContainerFactory;
import com.jfinal.plugin.activerecord.Db; import com.jfinal.plugin.activerecord.dialect.DialectFactory;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.activerecord.dialect.*;
import com.jfinal.plugin.cron4j.Cron4jPlugin; import com.jfinal.plugin.cron4j.Cron4jPlugin;
import com.jfinal.plugin.druid.DruidPlugin; import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.druid.RecordSqlFilter; import com.jfinal.plugin.druid.RecordSqlFilter;
...@@ -32,6 +27,7 @@ import com.jfinal.render.ViewType; ...@@ -32,6 +27,7 @@ import com.jfinal.render.ViewType;
import com.jfinal.server.undertow.UndertowServer; import com.jfinal.server.undertow.UndertowServer;
import com.jfinal.server.undertow.WebBuilder; import com.jfinal.server.undertow.WebBuilder;
import com.jfinal.template.Engine; import com.jfinal.template.Engine;
import java.io.File; import java.io.File;
public class MainConfig extends JFinalConfig { public class MainConfig extends JFinalConfig {
...@@ -181,12 +177,13 @@ public class MainConfig extends JFinalConfig { ...@@ -181,12 +177,13 @@ public class MainConfig extends JFinalConfig {
/******** 在此添加数据库 表-Model 映射 *********/ /******** 在此添加数据库 表-Model 映射 *********/
// 如果使用了JFinal Model 生成器 生成了BaseModel 把下面注释解开即可 // 如果使用了JFinal Model 生成器 生成了BaseModel 把下面注释解开即可
_MappingKit.mapping(arp); _MappingKit.mapping(arp);
AppStartConfig.configActiveRecordPlugin(arp);
// 添加到插件列表中 // 添加到插件列表中
me.add(dbPlugin); me.add(dbPlugin);
me.add(arp); me.add(arp);
// 配置Redis信息,自动判断单实例和集群并加入JFinal插件列表 // 配置Redis信息,自动判断单实例和集群并加入JFinal插件列表
new RedisConfig(me, p); new RedisConfig(me);
// 添加定时任务 // 添加定时任务
me.add(new Cron4jPlugin(PropKit.append("task.properties"))); me.add(new Cron4jPlugin(PropKit.append("task.properties")));
...@@ -222,6 +219,7 @@ public class MainConfig extends JFinalConfig { ...@@ -222,6 +219,7 @@ public class MainConfig extends JFinalConfig {
*/ */
@Override @Override
public void onStart() { public void onStart() {
AppStartConfig.onStart("aserver");
// new GoodSync().run(); // new GoodSync().run();
} }
......
package com.archser.aserver.controller; package com.archser.aserver.controller;
import com.archser.aserver.util.FinalStringUtil; import com.archser.aserver.model.Helper;
import java.io.File; import com.archser.aserver.service.HelperService;
import java.net.URLEncoder; import com.archser.aserver.util.DownLoadFileUtil;
import javax.servlet.http.HttpServletRequest; import com.archser.aserver.util.FinalStringUtil;
import com.archser.aserver.interceptor.JwtInterceptor; import com.archser.commons.services.LogService;
import com.archser.aserver.model.Helper; import com.jfinal.aop.Inject;
import com.archser.aserver.model.Menu; import com.jfinal.core.Controller;
import com.archser.aserver.service.HelperService; import com.jfinal.kit.Kv;
import com.archser.aserver.service.LogService; import com.jfinal.kit.Ret;
import com.archser.aserver.util.DownLoadFileUtil; import com.jfinal.plugin.activerecord.Page;
import com.jfinal.aop.Inject; import com.jfinal.upload.UploadFile;
import com.jfinal.core.Controller;
import com.jfinal.kit.Kv; import java.net.URLEncoder;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Db; /**
import com.jfinal.plugin.activerecord.Page; * 帮助中心
import com.jfinal.plugin.activerecord.Record; */
import com.jfinal.upload.UploadFile; public class HelperController extends Controller {
import dm.jdbc.a.d;
@Inject
/** private HelperService helperService;
* 帮助中心
*/ @Inject
public class HelperController extends Controller { private LogService logService;
@Inject public void getList(){
private HelperService helperService; String username = getAttr("username");
try {
@Inject Integer pageNumber = getParaToInt("pageNumber",1);
private LogService logService; Integer pageSize = getParaToInt("pageSize",20);
String searchText = getPara("searchText","");
public void getList(){ Page<Helper> list = helperService.getList(pageNumber, pageSize,searchText);
String username = getAttr("username"); renderJson(Ret.ok("list",list));
try { logService.saveAsLog("access", "应用管理-帮助中心-帮助中心", FinalStringUtil.QUERY);
Integer pageNumber = getParaToInt("pageNumber",1); } catch (Exception e) {
Integer pageSize = getParaToInt("pageSize",20); e.printStackTrace();
String searchText = getPara("searchText",""); logService.saveAsLogByFile("error","应用管理-帮助中心-获取帮助中心数据错误",null,e.getMessage(),FinalStringUtil.QUERY);
Page<Helper> list = helperService.getList(pageNumber, pageSize,searchText); renderJson(Ret.fail("message","服务器出现异常,请联系管理员!"));
renderJson(Ret.ok("list",list)); }
logService.saveAsLog("access", "应用管理-帮助中心-帮助中心", FinalStringUtil.QUERY); }
} catch (Exception e) {
e.printStackTrace(); public void add(){
logService.saveAsLogByFile("error","应用管理-帮助中心-获取帮助中心数据错误",null,e.getMessage(),FinalStringUtil.QUERY); String username = getAttr("username");
renderJson(Ret.fail("message","服务器出现异常,请联系管理员!")); try {
} UploadFile file = getFile("file");
} String name = getPara("name");
String description = getPara("description");
public void add(){ Integer type = getParaToInt("type");
String username = getAttr("username"); if (helperService.add(file, name, description, type)){
try { logService.saveAsLog("operate", "应用管理-帮助中心-添加帮助中心数据成功",FinalStringUtil.ADD);
UploadFile file = getFile("file"); renderJson(Ret.ok("data", "添加成功!"));
String name = getPara("name"); return;
String description = getPara("description"); }
Integer type = getParaToInt("type"); logService.saveAsLog("operate", "应用管理-帮助中心-添加帮助中心数据失败",FinalStringUtil.ADD);
if (helperService.add(file, name, description, type)){ renderJson(Ret.ok("data", "添加失败!"));
logService.saveAsLog("operate", "应用管理-帮助中心-添加帮助中心数据成功",FinalStringUtil.ADD); } catch (Exception e) {
renderJson(Ret.ok("data", "添加成功!")); e.printStackTrace();
return; logService.saveAsLogByFile("error","应用管理-帮助中心-添加帮助中心数据错误",null,e.getMessage(),FinalStringUtil.ADD);
} renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!"));
logService.saveAsLog("operate", "应用管理-帮助中心-添加帮助中心数据失败",FinalStringUtil.ADD); }
renderJson(Ret.ok("data", "添加失败!")); }
} catch (Exception e) {
e.printStackTrace(); public void edit(){
logService.saveAsLogByFile("error","应用管理-帮助中心-添加帮助中心数据错误",null,e.getMessage(),FinalStringUtil.ADD); String username = getAttr("username");
renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!")); try {
} Integer id = getParaToInt("id");
} String name = getPara("name");
String description = getPara("description");
public void edit(){ Integer type = getParaToInt("type");
String username = getAttr("username"); if (helperService.edit(id, name, description, type)){
try { logService.saveAsLog("operate", "应用管理-帮助中心-修改帮助中心数据成功",FinalStringUtil.UPDATE);
Integer id = getParaToInt("id"); renderJson(Ret.ok("msg", "修改成功"));
String name = getPara("name"); } else {
String description = getPara("description"); logService.saveAsLog("operate", "应用管理-帮助中心-修改帮助中心数据失败",FinalStringUtil.UPDATE);
Integer type = getParaToInt("type"); renderJson(Ret.fail("msg","修改失败!"));
if (helperService.edit(id, name, description, type)){ }
logService.saveAsLog("operate", "应用管理-帮助中心-修改帮助中心数据成功",FinalStringUtil.UPDATE); } catch (Exception e) {
renderJson(Ret.ok("msg", "修改成功")); e.printStackTrace();
} else { logService.saveAsLogByFile("error","应用管理-帮助中心-修改帮助中心数据错误",null,e.getMessage(),FinalStringUtil.UPDATE);
logService.saveAsLog("operate", "应用管理-帮助中心-修改帮助中心数据失败",FinalStringUtil.UPDATE); renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!"));
renderJson(Ret.fail("msg","修改失败!")); }
} }
} catch (Exception e) {
e.printStackTrace(); public void remove(){
logService.saveAsLogByFile("error","应用管理-帮助中心-修改帮助中心数据错误",null,e.getMessage(),FinalStringUtil.UPDATE); String username = getAttr("username");
renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!")); try {
} String ids = getPara("ids");
} if ( helperService.remove(ids)){
logService.saveAsLog("operate", "应用管理-帮助中心-删除帮助中心数据成功",FinalStringUtil.DELETE);
public void remove(){ renderJson(Ret.ok("msg", "删除成功!"));
String username = getAttr("username"); } else {
try { logService.saveAsLog("operate", "应用管理-帮助中心-删除帮助中心数据失败",FinalStringUtil.DELETE);
String ids = getPara("ids"); renderJson(Ret.fail("msg","删除失败!"));
if ( helperService.remove(ids)){ }
logService.saveAsLog("operate", "应用管理-帮助中心-删除帮助中心数据成功",FinalStringUtil.DELETE); } catch (Exception e) {
renderJson(Ret.ok("msg", "删除成功!")); e.printStackTrace();
} else { logService.saveAsLogByFile("error","应用管理-帮助中心-删除帮助中心数据错误",null,e.getMessage(),FinalStringUtil.DELETE);
logService.saveAsLog("operate", "应用管理-帮助中心-删除帮助中心数据失败",FinalStringUtil.DELETE); renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!"));
renderJson(Ret.fail("msg","删除失败!")); }
} }
} catch (Exception e) {
e.printStackTrace(); /**
logService.saveAsLogByFile("error","应用管理-帮助中心-删除帮助中心数据错误",null,e.getMessage(),FinalStringUtil.DELETE); * LiuKexin 20201120 下载操作手册
renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!")); */
} public void downloadOperation() {
} try {
Integer id = getParaToInt("id");
/** //文件是否存在
* LiuKexin 20201120 下载操作手册 Ret downloadOperation = helperService.downloadOperation(id,getResponse());
*/ if (downloadOperation.isOk()) {
public void downloadOperation() { Kv pathKv = (Kv) downloadOperation.get("msg");
try { /**LiuKexin 20210122 处理文件名 start */
Integer id = getParaToInt("id"); String userAgent = getRequest().getHeader("user-agent").toLowerCase();
//文件是否存在 String fileName = pathKv.getStr("name");
Ret downloadOperation = helperService.downloadOperation(id,getResponse()); if (userAgent.contains("msie") || userAgent.contains("like gecko") ) {
if (downloadOperation.isOk()) { // win10 ie edge 浏览器 和其他系统的ie
Kv pathKv = (Kv) downloadOperation.get("msg"); fileName = URLEncoder.encode(fileName, "UTF-8");
/**LiuKexin 20210122 处理文件名 start */ } else {
String userAgent = getRequest().getHeader("user-agent").toLowerCase(); // 非ie
String fileName = pathKv.getStr("name"); fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1");
if (userAgent.contains("msie") || userAgent.contains("like gecko") ) { }
// win10 ie edge 浏览器 和其他系统的ie /**LiuKexin 20210122 处理文件名 end */
fileName = URLEncoder.encode(fileName, "UTF-8"); //下载文件
} else { DownLoadFileUtil.downLoadFile(getResponse(), fileName, pathKv.getStr("path"), true);
// 非ie renderJson(Ret.ok("msg", "下载成功"));
fileName = new String(fileName.getBytes("UTF-8"), "iso-8859-1"); } else {
} renderJson(downloadOperation);
/**LiuKexin 20210122 处理文件名 end */ }
//下载文件 } catch (Exception e) {
DownLoadFileUtil.downLoadFile(getResponse(), fileName, pathKv.getStr("path"), true); e.printStackTrace();
renderJson(Ret.ok("msg", "下载成功")); renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!"));
} else { }
renderJson(downloadOperation);
} }
} catch (Exception e) {
e.printStackTrace();
renderJson(Ret.fail("msg","服务器出现异常,请联系管理员!")); /**
} * LiuKexin 20210310 判断此页是否设置为首页
*/
} public void HomeIsAlready() {
String username = this.getAttr("username");
String homeUrl = this.getPara("homeUrl");
/** // LiuKexin 20210319 添加参数
* LiuKexin 20210310 判断此页是否设置为首页 Boolean isHome = this.getParaToBoolean("isHome");
*/ String mark = this.getPara("mark");
public void HomeIsAlready() { if (null == homeUrl) {
String username = this.getAttr("username"); renderJson(Ret.fail("msg", "获取数据错误"));
String homeUrl = this.getPara("homeUrl"); }
// LiuKexin 20210319 添加参数 renderJson(helperService.HomeIsAlready(username,homeUrl,isHome,mark));
Boolean isHome = this.getParaToBoolean("isHome"); }
String mark = this.getPara("mark");
if (null == homeUrl) { /**
renderJson(Ret.fail("msg", "获取数据错误")); * LiuKexin 20210310 设置首页
} */
renderJson(helperService.HomeIsAlready(username,homeUrl,isHome,mark)); public void settingHome() {
} String username = this.getAttr("username");
String homeUrl = this.getPara("homeUrl");
/** String origin = this.getPara("origin");
* LiuKexin 20210310 设置首页 if (null == homeUrl || null == origin) {
*/ renderJson(Ret.fail("msg", "获取数据错误"));
public void settingHome() { }
String username = this.getAttr("username"); renderJson(helperService.settingHome(username,homeUrl,origin));
String homeUrl = this.getPara("homeUrl"); }
String origin = this.getPara("origin");
if (null == homeUrl || null == origin) { }
renderJson(Ret.fail("msg", "获取数据错误"));
}
renderJson(helperService.settingHome(username,homeUrl,origin));
}
}
package com.archser.aserver.controller; package com.archser.aserver.controller;
import com.archser.aserver.util.AesEncryptUtil; import com.archser.aserver.model.User;
import com.archser.aserver.util.FinalStringUtil; import com.archser.commons.db.InfoSystem;
import com.archser.aserver.util.redis.InfoSystem; import com.archser.commons.db.InfoUser;
import com.archser.aserver.util.redis.InfoUser; import com.archser.commons.model.AsSystem;
import java.math.BigInteger; import com.archser.commons.model.AsUser;
import java.util.Date; import com.archser.commons.services.LogService;
import java.util.Iterator; import com.archser.aserver.util.AesEncryptUtil;
import java.util.LinkedHashMap; import com.archser.aserver.util.FinalStringUtil;
import java.util.List; import java.math.BigInteger;
import java.util.Map; import java.util.Date;
import java.util.Map.Entry; import java.util.Iterator;
import java.util.Optional; import java.util.LinkedHashMap;
import org.bouncycastle.crypto.InvalidCipherTextException; import java.util.List;
import org.bouncycastle.crypto.params.ECPrivateKeyParameters; import java.util.Map;
import org.bouncycastle.pqc.math.linearalgebra.ByteUtils; import java.util.Map.Entry;
import com.alibaba.fastjson.JSON; import java.util.Optional;
import com.archser.aserver.interceptor.JwtInterceptor; import org.bouncycastle.crypto.InvalidCipherTextException;
import com.archser.aserver.model.System; import org.bouncycastle.crypto.params.ECPrivateKeyParameters;
import com.archser.aserver.model.User; import org.bouncycastle.pqc.math.linearalgebra.ByteUtils;
import com.archser.aserver.service.LogService; import com.alibaba.fastjson.JSON;
import com.archser.aserver.service.UserService; import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.util.HttpRequestUtil; import com.archser.aserver.model.System;
import com.archser.aserver.util.KeysUtil; import com.archser.aserver.service.UserService;
import com.archser.aserver.util.gm.BCECUtil; import com.archser.aserver.util.HttpRequestUtil;
import com.archser.aserver.util.gm.SM2Util; import com.archser.aserver.util.KeysUtil;
import com.jfinal.aop.Clear; import com.archser.aserver.util.gm.BCECUtil;
import com.jfinal.aop.Inject; import com.archser.aserver.util.gm.SM2Util;
import com.jfinal.core.Controller; import com.jfinal.aop.Clear;
import com.jfinal.kit.HashKit; import com.jfinal.aop.Inject;
import com.jfinal.kit.Kv; import com.jfinal.core.Controller;
import com.jfinal.kit.PropKit; import com.jfinal.kit.HashKit;
import com.jfinal.kit.Ret; import com.jfinal.kit.Kv;
import com.jfinal.kit.StrKit; import com.jfinal.kit.PropKit;
import com.jfinal.log.Log; import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Db; import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Record; import com.jfinal.log.Log;
import com.jfinal.plugin.redis.Redis; import com.jfinal.plugin.activerecord.Db;
import com.spbportal.sso.SsoToken; import com.jfinal.plugin.activerecord.Record;
import io.jsonwebtoken.JwsHeader; import com.jfinal.plugin.redis.Redis;
import io.jsonwebtoken.Jwts; import com.spbportal.sso.SsoToken;
import io.jsonwebtoken.SignatureAlgorithm; import io.jsonwebtoken.JwsHeader;
import io.jsonwebtoken.Jwts;
/** import io.jsonwebtoken.SignatureAlgorithm;
* IndexController 指向系统访问首页
* /**
* @author jbolt.cn * IndexController 指向系统访问首页
* @email 909854136@qq.com *
* @date 2018年11月4日 下午9:02:52 * @author jbolt.cn
*/ * @email 909854136@qq.com
public class IndexController extends Controller { * @date 2018年11月4日 下午9:02:52
/** */
* 登陆用户名,密码解密 public class IndexController extends Controller {
*/ /**
public static final String PRIVATE_KEY_D = "38627fffe8003e6d2faa76d4eae2f74fd9cd7be257ab36c356c4f01bbc17e41d"; * 登陆用户名,密码解密
public static final ECPrivateKeyParameters USER_PRIVATE_KEY = BCECUtil.createECPrivateKeyParameters( */
new BigInteger(ByteUtils.fromHexString(PRIVATE_KEY_D)), SM2Util.DOMAIN_PARAMS); public static final String PRIVATE_KEY_D = "38627fffe8003e6d2faa76d4eae2f74fd9cd7be257ab36c356c4f01bbc17e41d";
public static final ECPrivateKeyParameters USER_PRIVATE_KEY = BCECUtil.createECPrivateKeyParameters(
private static Log log = Log.getLog(IndexController.class); new BigInteger(ByteUtils.fromHexString(PRIVATE_KEY_D)), SM2Util.DOMAIN_PARAMS);
/**
* 超期时间:24小时,即:24 * 60 * 60 * 1000 private static Log log = Log.getLog(IndexController.class);
*/ /**
public static final int EXPIRATION = 24 * 60 * 60 * 1000; * 超期时间:24小时,即:24 * 60 * 60 * 1000
private static int permitLoginTimes = 5;// 允许登陆次数 */
private static int hour = 2; // 两小时内不可登录 public static final int EXPIRATION = 24 * 60 * 60 * 1000;
@Inject private static int permitLoginTimes = 5;// 允许登陆次数
private LogService logService; private static int hour = 2; // 两小时内不可登录
@Inject @Inject
private UserService userService; private LogService logService;
@Inject @Inject
private AesEncryptUtil encryptUtil; private UserService userService;
@Inject
private AesEncryptUtil encryptUtil;
/**
* 首页Action
*/ /**
@Clear * 首页Action
public void index() { */
render("index.html"); @Clear
} public void index() {
render("index.html");
/** }
* 修改密码
*/ /**
@Clear * 修改密码
public void updatePassword() { */
String username = this.getPara("username"); @Clear
String password = this.getPara("newPwd"); public void updatePassword() {
password = HashKit.sha256(password); String username = this.getPara("username");
int a = userService.updatePwd(password, username); String password = this.getPara("newPwd");
if (a == 0) { password = HashKit.sha256(password);
this.renderJson(Ret.fail("msg", "修改失败")); int a = userService.updatePwd(password, username);
logService.saveAsLog("operate", if (a == 0) {
username + "修改密码操作:修改密码失败", FinalStringUtil.UPDATE); this.renderJson(Ret.fail("msg", "修改失败"));
return; logService.saveAsLog("operate",
} username + "修改密码操作:修改密码失败", FinalStringUtil.UPDATE);
this.renderJson(Ret.ok("msg", "修改成功")); return;
logService.saveAsLog("operate", username + "修改密码操作:修改密码成功", FinalStringUtil.UPDATE); }
} this.renderJson(Ret.ok("msg", "修改成功"));
logService.saveAsLog("operate", username + "修改密码操作:修改密码成功", FinalStringUtil.UPDATE);
private String decrypt(String sm2Cipher) throws InvalidCipherTextException { }
return new String(SM2Util.decrypt(USER_PRIVATE_KEY, ByteUtils.fromHexString("04" + sm2Cipher)));
} private String decrypt(String sm2Cipher) throws InvalidCipherTextException {
return new String(SM2Util.decrypt(USER_PRIVATE_KEY, ByteUtils.fromHexString("04" + sm2Cipher)));
/** }
* 登录验证
*/ /**
@Clear(JwtInterceptor.class) * 登录验证
// @Before(LoginValidator.class) */
public void login() { @Clear(JwtInterceptor.class)
String app = this.getPara("app"); // @Before(LoginValidator.class)
String username = this.getPara("username"); public void login() {
String password = this.getPara("password"); String app = this.getPara("app");
String callback = this.getPara("callback"); String username = this.getPara("username");
// 解密用户名和密码 String password = this.getPara("password");
try { String callback = this.getPara("callback");
username = AesEncryptUtil.desEncrypt(username); // 解密用户名和密码
password = AesEncryptUtil.desEncrypt(password); try {
} catch (Exception e1) { username = decrypt(username);
e1.printStackTrace(); password = decrypt(password);
username = this.getPara("username"); } catch (Exception e1) {
password = this.getPara("password"); e1.printStackTrace();
} username = this.getPara("username");
//校验密码是否符合强度设置 password = this.getPara("password");
String verify = password; }
password = HashKit.sha256(password); //校验密码是否符合强度设置
User user = InfoUser.getUser(username); String verify = password;
if (user == null) { password = HashKit.sha256(password);
this.renderJson(Ret.fail("msg", "用户名或密码不存在: " + username)); AsUser user = InfoUser.getUser(username);
logService.saveAsLog("login", "该用户非本系统用户正在非法登录", FinalStringUtil.QUERY); if (user == null) {
return; this.renderJson(Ret.fail("msg", "用户名或密码不存在: " + username));
} logService.saveAsLog("login", "该用户非本系统用户正在非法登录", FinalStringUtil.QUERY);
/**chenyong 20201116 add 增加演示时提醒 start**/ return;
String showSetting = Db.queryStr(Db.getSql("getConfigByName"), "showSetting"); }
if (showSetting != null) { /**chenyong 20201116 add 增加演示时提醒 start**/
String[] showSettingArr=showSetting.split("\\|"); String showSetting = Db.queryStr(Db.getSql("getConfigByName"), "showSetting");
boolean isShow="是".equals(showSettingArr[0]); if (showSetting != null) {
if(isShow) { String[] showSettingArr=showSetting.split("\\|");
boolean isShowUser=false; boolean isShow="是".equals(showSettingArr[0]);
String[] userNameArr=showSettingArr[1].split(","); if(isShow) {
for(String userName:userNameArr) { boolean isShowUser=false;
if(username.equals(userName)) { String[] userNameArr=showSettingArr[1].split(",");
isShowUser=true; for(String userName:userNameArr) {
break; if(username.equals(userName)) {
} isShowUser=true;
} break;
if(!isShowUser) { }
this.renderJson(Ret.fail("msg", "系统正在演示中,请稍候......")); }
return; if(!isShowUser) {
} this.renderJson(Ret.fail("msg", "系统正在演示中,请稍候......"));
} return;
} }
/**chenyong 20201116 add end**/ }
// 一旦开启三员 admin用户不能使用 }
if ("admin".equals(user.getUsername())) { /**chenyong 20201116 add end**/
Integer userCount = Db.queryInt(Db.getSql("hasThreeMemberUsersCount")); // 一旦开启三员 admin用户不能使用
boolean isExistThreeMemberUsers = userCount != null && (userCount > 0); if ("admin".equals(user.getUsername())) {
if (isExistThreeMemberUsers) { Integer userCount = Db.queryInt(Db.getSql("hasThreeMemberUsersCount"));
this.renderJson(Ret.fail("msg", "已开启三员管理,admin失效了。")); boolean isExistThreeMemberUsers = userCount != null && (userCount > 0);
logService.saveAsLog("login", "登录失败,原因:已开启三员管理", FinalStringUtil.QUERY); if (isExistThreeMemberUsers) {
return; this.renderJson(Ret.fail("msg", "已开启三员管理,admin失效了。"));
} logService.saveAsLog("login", "登录失败,原因:已开启三员管理", FinalStringUtil.QUERY);
} return;
if (user.getLocked() != null && Integer.parseInt(user.getLocked()) == 1) { }
this.renderJson(Ret.fail("msg", "当前账户已被锁定")); }
logService.saveAsLog("login","登录失败,原因:该用户已被锁定", FinalStringUtil.QUERY); if (user.getLocked() != null && Integer.parseInt(user.getLocked()) == 1) {
return; this.renderJson(Ret.fail("msg", "当前账户已被锁定"));
} logService.saveAsLog("login","登录失败,原因:该用户已被锁定", FinalStringUtil.QUERY);
if (!password.equals(user.getPassword())) { return;
if (this.checkErrorCount(user)) { }
this.renderJson(Ret.fail("msg", "您的错误次数已达5次以上,请稍后再试!")); if (!password.equals(user.getPassword())) {
} else { if (this.checkErrorCount(user)) {
int errorCount = permitLoginTimes - (user.getErrorcount() == null ? 0 : user.getErrorcount()) - 1; this.renderJson(Ret.fail("msg", "您的错误次数已达5次以上,请稍后再试!"));
if (user.getErrorcount() !=null && user.getErrorcount() == 4) { } else {
this.renderJson(Ret.fail("msg", "用户名或密码验证失败,您的账户于两小时后才可登录!")); int errorCount = permitLoginTimes - (user.getErrorcount() == null ? 0 : user.getErrorcount()) - 1;
} else { if (user.getErrorcount() !=null && user.getErrorcount() == 4) {
this.renderJson(Ret.fail("msg", "用户名或密码验证失败,您还有" + errorCount + "次机会!")); this.renderJson(Ret.fail("msg", "用户名或密码验证失败,您的账户于两小时后才可登录!"));
logService.saveAsLog("login", "登录失败,原因:密码验证错误", FinalStringUtil.QUERY); } else {
} this.renderJson(Ret.fail("msg", "用户名或密码验证失败,您还有" + errorCount + "次机会!"));
} logService.saveAsLog("login", "登录失败,原因:密码验证错误", FinalStringUtil.QUERY);
return ; }
} }
Integer errorcount = user.getErrorcount(); return ;
if (errorcount != null && errorcount != 0) { }
if (!this.checkWhenPwdOk(user)) { Integer errorcount = user.getErrorcount();
Date date = new Date(); if (errorcount != null && errorcount != 0) {
long hour1 = 2 * 60 * 60; if (!this.checkWhenPwdOk(user)) {
long begin = date.getTime(); Date date = new Date();
long end = user.getLastLoginTime().getTime(); long hour1 = 2 * 60 * 60;
long between = (begin - end) / 1000; long begin = date.getTime();
long hour2 = (hour1 - between) % (24 * 3600) / 3600; long end = user.getLastLoginTime().getTime();
long minute = (hour1 - between) % 3600 / 60; long between = (begin - end) / 1000;
long second = (hour1 - between) % 60; long hour2 = (hour1 - between) % (24 * 3600) / 3600;
if (between < hour1) { long minute = (hour1 - between) % 3600 / 60;
this.renderJson(Ret.fail("msg", "您的账户还剩" + hour2 + "小时" + minute + "分" + second + "秒才可登录!")); long second = (hour1 - between) % 60;
return; if (between < hour1) {
} this.renderJson(Ret.fail("msg", "您的账户还剩" + hour2 + "小时" + minute + "分" + second + "秒才可登录!"));
} return;
} }
}
if (!"admin".equals(user.getUsername())) { }
Integer noLockedRolesCount = Db.queryInt(Db.getSql("hasNoLockedRolesCount"), user.getUsername());
boolean noLockedRolesFlag = noLockedRolesCount != null && (noLockedRolesCount > 0); if (!"admin".equals(user.getUsername())) {
if (!noLockedRolesFlag) { Integer noLockedRolesCount = Db.queryInt(Db.getSql("hasNoLockedRolesCount"), user.getUsername());
this.renderJson(Ret.fail("msg", "拥有的角色全部被锁定,不能登录系统了。")); boolean noLockedRolesFlag = noLockedRolesCount != null && (noLockedRolesCount > 0);
logService.saveAsLog("login", "登录失败,原因:该用户拥有的角色全部被锁定", FinalStringUtil.QUERY); if (!noLockedRolesFlag) {
return; this.renderJson(Ret.fail("msg", "拥有的角色全部被锁定,不能登录系统了。"));
} logService.saveAsLog("login", "登录失败,原因:该用户拥有的角色全部被锁定", FinalStringUtil.QUERY);
} return;
}
System system = InfoSystem.getSystem(app); }
if (system == null) {
this.renderJson(Ret.fail("msg", "没有找到应用:" + app)); AsSystem system = InfoSystem.getSystem(app);
logService.saveAsLog("login", "登录失败,原因:没有找到应用" + app, FinalStringUtil.QUERY); if (system == null) {
return; this.renderJson(Ret.fail("msg", "没有找到应用:" + app));
} logService.saveAsLog("login", "登录失败,原因:没有找到应用" + app, FinalStringUtil.QUERY);
if (StrKit.isBlank(system.getPrivatekey()) || StrKit.isBlank(system.getKeyid())) { return;
this.renderJson(Ret.fail("msg", "没有找到应用的密钥:" + app)); }
logService.saveAsLog("login", "登录失败,原因:没有找到应用的密钥" + app, FinalStringUtil.QUERY); if (StrKit.isBlank(system.getPrivatekey()) || StrKit.isBlank(system.getKeyid())) {
return; this.renderJson(Ret.fail("msg", "没有找到应用的密钥:" + app));
} logService.saveAsLog("login", "登录失败,原因:没有找到应用的密钥" + app, FinalStringUtil.QUERY);
return;
//查询用户是否有该系统的权限 }
// boolean homeAuth = userService.checkUserSystemPermission(user.getId(), app);
// if (!homeAuth) { //查询用户是否有该系统的权限
// this.renderJson(Ret.fail("msg", "您没有权限登录" + system.getTitle() + "系统")); // boolean homeAuth = userService.checkUserSystemPermission(user.getId(), app);
// logService.saveAsLog("login", username, JwtInterceptor.getIpAddr(getRequest()), "登录失败,原因:您没有权限登录此系统" + app, // if (!homeAuth) {
// app); // this.renderJson(Ret.fail("msg", "您没有权限登录" + system.getTitle() + "系统"));
// return; // logService.saveAsLog("login", username, JwtInterceptor.getIpAddr(getRequest()), "登录失败,原因:您没有权限登录此系统" + app,
// } // app);
// return;
List<System> systemList = userService.findSystemWithUserPermission(user.getId()); // }
/** 修改如果登陆用户为admin用户则直接登陆 huwenbin 2020/5/20 start */
if (!"admin".equals(user.getUsername())) { List<AsSystem> systemList = userService.findSystemWithUserPermission(user.getId());
if ((systemList == null || systemList.isEmpty())) { /** 修改如果登陆用户为admin用户则直接登陆 huwenbin 2020/5/20 start */
this.renderJson(Ret.fail("msg", "您没有权限登录" + system.getTitle() + "系统")); if (!"admin".equals(user.getUsername())) {
logService.saveAsLog("login", if ((systemList == null || systemList.isEmpty())) {
"登录失败,原因:您没有权限登录此系统" + app, FinalStringUtil.QUERY); this.renderJson(Ret.fail("msg", "您没有权限登录" + system.getTitle() + "系统"));
return; logService.saveAsLog("login",
} "登录失败,原因:您没有权限登录此系统" + app, FinalStringUtil.QUERY);
return;
Optional<System> systemOptional = userService.getSystemByName(app, systemList); }
if (!systemOptional.isPresent()) {// 没有当前系统的权限
system = systemList.get(0); Optional<AsSystem> systemOptional = userService.getSystemByName(app, systemList);
app = system.getName(); if (!systemOptional.isPresent()) {// 没有当前系统的权限
callback = system.getUrl(); system = systemList.get(0);
} app = system.getName();
} callback = system.getUrl();
/** 修改如果登陆用户为admin用户则直接登陆 huwenbin 2020/5/20 end */ }
}
try { /** 修改如果登陆用户为admin用户则直接登陆 huwenbin 2020/5/20 end */
String jws = Jwts.builder()
// 设置密匙ID try {
.setHeaderParam(JwsHeader.KEY_ID, system.getKeyid()) String jws = Jwts.builder()
// 赋予应用 // 设置密匙ID
.setSubject(app) .setHeaderParam(JwsHeader.KEY_ID, system.getKeyid())
// 签发时间 // 赋予应用
.setIssuedAt(new Date()) .setSubject(app)
// 超期时间 // 签发时间
.setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION)) .setIssuedAt(new Date())
// 用户名 // 超期时间
.claim("name", username).claim("ip", JwtInterceptor.getIpAddr(getRequest())) .setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION))
// 签名 // 用户名
.signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact(); .claim("name", username).claim("ip", JwtInterceptor.getIpAddr(getRequest()))
// 签名
if (errorcount != null && errorcount != 0) { .signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact();
this.setErrZero(user);
} if (errorcount != null && errorcount != 0) {
this.setErrZero(user);
Boolean aBoolean = userService.verifyPassword(verify); }
this.renderJson(Ret.ok("token", jws).set("callback", callback).set("verify",aBoolean));
logService.saveAsLog("login", username + "登录" + app + "成功", FinalStringUtil.QUERY); Boolean aBoolean = userService.verifyPassword(verify);
/** this.renderJson(Ret.ok("token", jws).set("callback", callback).set("verify",aBoolean));
* 20200706 lidecai 将用户信息保存到Redis end logService.saveAsLog("login", username + "登录" + app + "成功", FinalStringUtil.QUERY);
*/ /**
} catch (Exception e) { * 20200706 lidecai 将用户信息保存到Redis end
log.error("生成登录票据失败", e); */
this.renderJson(Ret.fail("msg", "生成登录票据失败")); } catch (Exception e) {
logService.saveAsLog("login", "生成登录票据失败", FinalStringUtil.QUERY); log.error("生成登录票据失败", e);
} this.renderJson(Ret.fail("msg", "生成登录票据失败"));
} logService.saveAsLog("login", "生成登录票据失败", FinalStringUtil.QUERY);
}
/** }
* LiuKexin 20210310 登录前先获取设置首页的信息
*/ /**
@Clear * LiuKexin 20210310 登录前先获取设置首页的信息
public void getUserHome() { */
String username = this.getPara("username"); @Clear
Record findUser = Db.findById("AS_USER", "username", username); public void getUserHome() {
if (null == findUser) { String username = this.getPara("username");
renderJson(Ret.fail()); Record findUser = Db.findById("AS_USER", "username", username);
return; if (null == findUser) {
} renderJson(Ret.fail());
Record findUserHome = Db.findById("AS_USER_HOME", "user_id", findUser.getInt("ID")); return;
if (null == findUserHome) { }
renderJson(Ret.fail()); Record findUserHome = Db.findById("AS_USER_HOME", "user_id", findUser.getInt("ID"));
return; if (null == findUserHome) {
} renderJson(Ret.fail());
renderJson(Ret.ok("app", findUserHome.getStr("system")).set("callback", findUserHome.getStr("home_url"))); return;
} }
renderJson(Ret.ok("app", findUserHome.getStr("system")).set("callback", findUserHome.getStr("home_url")));
/** }
* @Description: 验证密码强度
* @authorAndDate: ChengYaqing create on 2020/10/30 10:38 /**
* @return void * @Description: 验证密码强度
*/ * @authorAndDate: ChengYaqing create on 2020/10/30 10:38
@Clear * @return void
public void verifyPassword() { */
String password = getPara("password"); @Clear
if(password==null||"".equals(password)||"null".equals(password)) { public void verifyPassword() {
renderJson(Ret.fail("msg","密码不能为空")); String password = getPara("password");
return; if(password==null||"".equals(password)||"null".equals(password)) {
} renderJson(Ret.fail("msg","密码不能为空"));
try { return;
password = decrypt(password); }
} catch (Exception e1) { try {
e1.printStackTrace(); password = decrypt(password);
password = this.getPara("password"); } catch (Exception e1) {
} e1.printStackTrace();
try { password = this.getPara("password");
String verify = userService.verifyPasswordInfo(password); }
if("".equals(verify)) { try {
renderJson(Ret.ok()); String verify = userService.verifyPasswordInfo(password);
} else { if("".equals(verify)) {
renderJson(Ret.fail("msg",verify)); renderJson(Ret.ok());
} } else {
} catch (Exception e) { renderJson(Ret.fail("msg",verify));
renderJson(Ret.fail("error",e.getMessage())); }
} } catch (Exception e) {
} renderJson(Ret.fail("error",e.getMessage()));
}
// 密码正确时错误次数清零 }
private void setErrZero(User user) {
Db.update(Db.getSqlPara("updateForOk", Kv.by("id", user.getId()))); // 密码正确时错误次数清零
} private void setErrZero(AsUser user) {
Db.update(Db.getSqlPara("updateForOk", Kv.by("id", user.getId())));
//密码错误时判断错误次数是否为5次 }
private boolean checkErrorCount(User user) {
Kv cond = Kv.by("id", user.getId()).set("hour", hour).set("permitLoginTimes", permitLoginTimes); //密码错误时判断错误次数是否为5次
List<Record> currentList = Db.find(Db.getSqlPara("getErrorCount", cond)); private boolean checkErrorCount(AsUser user) {
int currentNum = 0; Kv cond = Kv.by("id", user.getId()).set("hour", hour).set("permitLoginTimes", permitLoginTimes);
for (Record record : currentList) { List<Record> currentList = Db.find(Db.getSqlPara("getErrorCount", cond));
currentNum = Integer.parseInt(record.get("flag").toString()); int currentNum = 0;
} for (Record record : currentList) {
if (currentNum >= permitLoginTimes) { currentNum = Integer.parseInt(record.get("flag").toString());
return true; }
} else { if (currentNum >= permitLoginTimes) {
//执行+1或=1的操作 return true;
Db.update(Db.getSqlPara("updateForErr", cond)); } else {
//同步到redis ChengYaqing 20210224 //执行+1或=1的操作
User byId = User.dao.findById(user.getId()); Db.update(Db.getSqlPara("updateForErr", cond));
InfoUser.saveUser(byId); //同步到redis ChengYaqing 20210224
return false; AsUser byId = AsUser.dao.findById(user.getId());
} InfoUser.saveUser(byId);
} return false;
}
//密码正确时判断次数和锁定时间是否在指定范围内 }
private boolean checkWhenPwdOk(User user) {
List<Record> currentList = Db.find(Db.getSqlPara("checkWhenPwdOk", //密码正确时判断次数和锁定时间是否在指定范围内
Kv.by("id", user.getId()).set("hour", hour).set("permitLoginTimes", permitLoginTimes))); private boolean checkWhenPwdOk(AsUser user) {
int currentNum = 0; List<Record> currentList = Db.find(Db.getSqlPara("checkWhenPwdOk",
if (currentList == null || currentList.size() == 0) { Kv.by("id", user.getId()).set("hour", hour).set("permitLoginTimes", permitLoginTimes)));
return true; int currentNum = 0;
} if (currentList == null || currentList.size() == 0) {
for (Record record : currentList) { return true;
currentNum = Integer.parseInt(record.get("flag").toString()); }
} for (Record record : currentList) {
if (currentNum >= permitLoginTimes) { currentNum = Integer.parseInt(record.get("flag").toString());
return false; }
} else { if (currentNum >= permitLoginTimes) {
return true; return false;
} } else {
} return true;
}
/** }
* 通过门户系统单点登录
* /**
* @author Guo XJ * 通过门户系统单点登录
* @date 2019-12-13 15:08:00 *
*/ * @author Guo XJ
public void ssoByPortalSystem() { * @date 2019-12-13 15:08:00
try { */
//获取app public void ssoByPortalSystem() {
String app = getPara("app", null); try {
if (app == null) { //获取app
renderJson(Ret.fail("msg", "获取服务信息失败")); String app = getPara("app", null);
return; if (app == null) {
} renderJson(Ret.fail("msg", "获取服务信息失败"));
//获取到门户系统的Token return;
String ssotoken = getPara("ssotoken"); }
//获取到personCode(用户唯一标识) //获取到门户系统的Token
SsoToken st = new SsoToken(); String ssotoken = getPara("ssotoken");
st.initialise(ssotoken); //获取到personCode(用户唯一标识)
String personCode = st.getTokenId(); SsoToken st = new SsoToken();
//获取用户 st.initialise(ssotoken);
Record user = userService.getUserInfoByPersonCode(personCode); String personCode = st.getTokenId();
System system = System.dao.template("getSystemPrivatekey", app).findFirst(); //获取用户
if (system == null) { Record user = userService.getUserInfoByPersonCode(personCode);
renderJson(Ret.fail("msg", "获取服务信息失败")); System system = System.dao.template("getSystemPrivatekey", app).findFirst();
return; if (system == null) {
} renderJson(Ret.fail("msg", "获取服务信息失败"));
//判断用户是否存在 return;
if (user != null && user.getStr("username") != null) { }
String jws = Jwts.builder() //判断用户是否存在
// 设置密匙ID if (user != null && user.getStr("username") != null) {
.setHeaderParam(JwsHeader.KEY_ID, system.getKeyid()) String jws = Jwts.builder()
// 赋予应用 // 设置密匙ID
.setSubject(app) .setHeaderParam(JwsHeader.KEY_ID, system.getKeyid())
// 签发时间 // 赋予应用
.setIssuedAt(new Date()) .setSubject(app)
// 超期时间 // 签发时间
.setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION)) .setIssuedAt(new Date())
// 用户名 // 超期时间
.claim("name", user.getStr("username")).claim("ip", JwtInterceptor.getIpAddr(getRequest())) .setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION))
// 签名 // 用户名
.signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact(); .claim("name", user.getStr("username")).claim("ip", JwtInterceptor.getIpAddr(getRequest()))
this.renderJson(Ret.ok("token", jws)); // 签名
return; .signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact();
} else { this.renderJson(Ret.ok("token", jws));
this.renderJson(Ret.fail("msg", "没有找到当前用户")); return;
return; } else {
} this.renderJson(Ret.fail("msg", "没有找到当前用户"));
} catch (Exception e) { return;
// TODO: handle exception }
e.printStackTrace(); } catch (Exception e) {
this.renderJson(Ret.fail("msg", "登录出错!")); // TODO: handle exception
} e.printStackTrace();
this.renderJson(Ret.fail("msg", "登录出错!"));
} }
/** }
* 根据邮政门户传回的code 获取用户信息
* /**
* @Title: getUserInfoForH5 * 根据邮政门户传回的code 获取用户信息
* @author LDC *
* @date 2019-11-19 03:22:34 * @Title: getUserInfoForH5
*/ * @author LDC
@Clear * @date 2019-11-19 03:22:34
public void getUserInfoForH5() { */
String code = getPara("code", null); @Clear
if (code == null) { public void getUserInfoForH5() {
renderJson(Ret.fail("msg", "获取用户信息失败")); String code = getPara("code", null);
return; if (code == null) {
} renderJson(Ret.fail("msg", "获取用户信息失败"));
return;
String app = getPara("app", null); }
if (app == null) {
renderJson(Ret.fail("msg", "获取服务信息失败")); String app = getPara("app", null);
return; if (app == null) {
} renderJson(Ret.fail("msg", "获取服务信息失败"));
return;
Map<String, String> paramMap = new LinkedHashMap<String, String>(); }
paramMap.put("client_id", "MmEepJkH7Hiz7EtS");
paramMap.put("code", code); Map<String, String> paramMap = new LinkedHashMap<String, String>();
paramMap.put("state", "1"); paramMap.put("client_id", "MmEepJkH7Hiz7EtS");
paramMap.put("grant_type", "authorization_code"); paramMap.put("code", code);
paramMap.put("scope", "scope"); paramMap.put("state", "1");
paramMap.put("redirect_uri", PropKit.get("redirect_uri")); paramMap.put("grant_type", "authorization_code");
paramMap.put("scope", "scope");
Iterator<Entry<String, String>> entrySet = paramMap.entrySet().iterator(); paramMap.put("redirect_uri", PropKit.get("redirect_uri"));
StringBuilder builder = new StringBuilder();
while (entrySet.hasNext()) { Iterator<Entry<String, String>> entrySet = paramMap.entrySet().iterator();
Entry<String, String> next = entrySet.next(); StringBuilder builder = new StringBuilder();
builder.append(next.getKey()).append("=").append(next.getValue()).append("&"); while (entrySet.hasNext()) {
} Entry<String, String> next = entrySet.next();
builder.append(next.getKey()).append("=").append(next.getValue()).append("&");
String param = builder.deleteCharAt(builder.length() - 1).toString(); }
Kv header = Kv.by("Content-type", "application/x-www-form-urlencoded");
String result = HttpRequestUtil.sendPost(PropKit.get("authUrl"), param,header); String param = builder.deleteCharAt(builder.length() - 1).toString();
Kv parseObject = JSON.parseObject(result, Kv.class); Kv header = Kv.by("Content-type", "application/x-www-form-urlencoded");
Object access_token = parseObject.get("access_token"); String result = HttpRequestUtil.sendPost(PropKit.get("authUrl"), param,header);
if (access_token == null) { Kv parseObject = JSON.parseObject(result, Kv.class);
renderJson(Ret.fail("msg", "获取授权失败,请重新登录")); Object access_token = parseObject.get("access_token");
return; if (access_token == null) {
} renderJson(Ret.fail("msg", "获取授权失败,请重新登录"));
String sendPost = HttpRequestUtil.sendPost(PropKit.get("userInfoUrl"), return;
"access_token=" + access_token.toString(),header); }
Kv userObj = JSON.parseObject(sendPost, Kv.class); String sendPost = HttpRequestUtil.sendPost(PropKit.get("userInfoUrl"),
Object uuid = userObj.get("uuid"); "access_token=" + access_token.toString(),header);
if (uuid == null) { Kv userObj = JSON.parseObject(sendPost, Kv.class);
renderJson(Ret.fail("msg", "获取用户信息失败")); Object uuid = userObj.get("uuid");
return; if (uuid == null) {
} renderJson(Ret.fail("msg", "获取用户信息失败"));
System system = System.dao.template("getSystemPrivatekey", app).findFirst(); return;
if (system == null) { }
renderJson(Ret.fail("msg", "获取服务信息失败")); System system = System.dao.template("getSystemPrivatekey", app).findFirst();
return; if (system == null) {
} renderJson(Ret.fail("msg", "获取服务信息失败"));
Record userInfo = Db.findById("AS_USER", "UUID", uuid.toString()); return;
if (userInfo == null) { }
renderJson(Ret.fail("msg", "没有找到当前用户")); Record userInfo = Db.findById("AS_USER", "UUID", uuid.toString());
return; if (userInfo == null) {
} renderJson(Ret.fail("msg", "没有找到当前用户"));
String userName = userInfo.getStr("USERNAME"); return;
if (userName == null) { }
renderJson(Ret.fail("msg", "获取用户名失败")); String userName = userInfo.getStr("USERNAME");
return; if (userName == null) {
} renderJson(Ret.fail("msg", "获取用户名失败"));
try { return;
String jws = Jwts.builder() }
// 设置密匙ID try {
.setHeaderParam(JwsHeader.KEY_ID, system.getKeyid()) String jws = Jwts.builder()
// 赋予应用 // 设置密匙ID
.setSubject(app) .setHeaderParam(JwsHeader.KEY_ID, system.getKeyid())
// 签发时间 // 赋予应用
.setIssuedAt(new Date()) .setSubject(app)
// 超期时间 // 签发时间
.setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION)) .setIssuedAt(new Date())
// 用户名 // 超期时间
.claim("name", userName).claim("ip", JwtInterceptor.getIpAddr(getRequest())) .setExpiration(new Date(java.lang.System.currentTimeMillis() + EXPIRATION))
// 签名 // 用户名
.signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact(); .claim("name", userName).claim("ip", JwtInterceptor.getIpAddr(getRequest()))
this.renderJson(Ret.ok("token", jws)); // 签名
logService.saveAsLog("login", userName + "登录" + app + "成功", FinalStringUtil.QUERY); .signWith(KeysUtil.privatekey(system.getPrivatekey()), SignatureAlgorithm.RS256).compact();
} catch (Exception e) { this.renderJson(Ret.ok("token", jws));
log.error("生成登录票据失败", e); logService.saveAsLog("login", userName + "登录" + app + "成功", FinalStringUtil.QUERY);
this.renderJson(Ret.fail("msg", "生成登录票据失败")); } catch (Exception e) {
logService.saveAsLog("login", "生成登录票据失败", FinalStringUtil.QUERY); log.error("生成登录票据失败", e);
} this.renderJson(Ret.fail("msg", "生成登录票据失败"));
} logService.saveAsLog("login", "生成登录票据失败", FinalStringUtil.QUERY);
}
/** }
* 退出系统,清空Redis 中的用户信息
* @Time:2020年7月6日 - 下午5:19:58 /**
* @author:李德才 * 退出系统,清空Redis 中的用户信息
* @param: * @Time:2020年7月6日 - 下午5:19:58
* @return: void * @author:李德才
* @throws * @param:
*/ * @return: void
public void loginOut() { * @throws
String userName = getAttrForStr("username"); */
Redis.use().del(userName + "_INFO"); public void loginOut() {
renderJson(Ret.ok()); String userName = getAttrForStr("username");
} Redis.use().del(userName + "_INFO");
renderJson(Ret.ok());
}
}
}
package com.archser.aserver.controller; package com.archser.aserver.controller;
import com.archser.aserver.util.FinalStringUtil; import com.archser.aserver.util.FinalStringUtil;
import com.archser.aserver.util.redis.InfoSystem;
import com.archser.aserver.util.redis.InfoUser;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
...@@ -10,11 +8,13 @@ import java.util.List; ...@@ -10,11 +8,13 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import com.archser.commons.db.InfoSystem;
import com.archser.commons.db.InfoUser;
import com.archser.commons.services.LogService;
import com.archser.aserver.interceptor.JwtInterceptor; import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.model.Menu; import com.archser.aserver.model.Menu;
import com.archser.aserver.model.MenuStar; import com.archser.aserver.model.MenuStar;
import com.archser.aserver.model.System; import com.archser.aserver.model.System;
import com.archser.aserver.service.LogService;
import com.archser.aserver.service.MenuService; import com.archser.aserver.service.MenuService;
import com.archser.aserver.util.CollectionUtil; import com.archser.aserver.util.CollectionUtil;
import com.jfinal.aop.Inject; import com.jfinal.aop.Inject;
......
package com.archser.aserver.controller; package com.archser.aserver.controller;
import com.archser.aserver.util.FinalStringUtil; import com.archser.aserver.service.MessageService;
import org.apache.commons.io.IOUtils; import com.archser.aserver.util.FinalStringUtil;
import org.apache.log4j.Logger; import org.apache.commons.io.IOUtils;
import org.apache.log4j.Logger;
import com.alibaba.fastjson.JSON;
import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.model.Message; import com.alibaba.fastjson.JSON;
import com.archser.aserver.service.LogService; import com.archser.aserver.interceptor.JwtInterceptor;
import com.archser.aserver.service.MessageService; import com.archser.aserver.model.Message;
import com.archser.aserver.websocket.MessageRefreshTrigger; import com.archser.aserver.service.LogService;
import com.jfinal.aop.Clear; import com.archser.aserver.websocket.MessageRefreshTrigger;
import com.jfinal.aop.Inject; import com.jfinal.aop.Clear;
import com.jfinal.core.Controller; import com.jfinal.aop.Inject;
import com.jfinal.kit.Ret; import com.jfinal.core.Controller;
import com.jfinal.kit.StrKit; import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Page; import com.jfinal.kit.StrKit;
import com.jfinal.plugin.activerecord.Page;
/**
* 消息相关 /**
* * 消息相关
* @author dgq *
* * @author dgq
*/ *
public class MessageController extends Controller { */
public class MessageController extends Controller {
@Inject
LogService logService; @Inject
LogService logService;
@Inject
MessageService messageService; @Inject
MessageService messageService;
private static final Logger logger = Logger.getLogger(MessageController.class);
private static final Logger logger = Logger.getLogger(MessageController.class);
/**
* 获取未读消息数量 /**
*/ * 获取未读消息数量
public void count() { */
String username = this.getAttr("username"); public void count() {
Long count = messageService.getCountByRead(null, username); String username = this.getAttr("username");
this.renderJson(Ret.ok("count", count)); Long count = messageService.getCountByRead(null, username);
} this.renderJson(Ret.ok("count", count));
}
/**
* menu unread:未读,readed:已读,其他;查询所有 /**
*/ * menu unread:未读,readed:已读,其他;查询所有
public void getMessagePageData() { */
int pageNumber = this.getParaToInt("pageNumber"); public void getMessagePageData() {
int pageSize = this.getParaToInt("pageSize"); int pageNumber = this.getParaToInt("pageNumber");
String username = this.getAttr("username"); int pageSize = this.getParaToInt("pageSize");
String menu = this.getPara("menu"); String username = this.getAttr("username");
/** 2020年7月1日 添加模糊查询 yangchengwu YZJ-3915*/ String menu = this.getPara("menu");
String likeVal = this.getPara("likeVal"); /** 2020年7月1日 添加模糊查询 yangchengwu YZJ-3915*/
Page<Message> page = messageService.getMessagePageData(pageNumber, pageSize, username, menu,likeVal); String likeVal = this.getPara("likeVal");
Page<Message> page = messageService.getMessagePageData(pageNumber, pageSize, username, menu,likeVal);
if (page != null) {
renderJson(Ret.ok("page", page)); if (page != null) {
} else { renderJson(Ret.ok("page", page));
renderJson(Ret.fail("msg", "获取消息列表失败")); } else {
} renderJson(Ret.fail("msg", "获取消息列表失败"));
} }
}
/**
* 标记为已读 /**
*/ * 标记为已读
public void markRead() { */
int id = this.getParaToInt("id"); public void markRead() {
boolean markRead = this.messageService.markRead(id); int id = this.getParaToInt("id");
renderJson(markRead ? Ret.ok(): Ret.fail()); boolean markRead = this.messageService.markRead(id);
} renderJson(markRead ? Ret.ok(): Ret.fail());
}
/**
* 删除消息 /**
*/ * 删除消息
public void deleteMessage() { */
String ids = this.getPara("ids"); public void deleteMessage() {
if (ids.length() == 0) { String ids = this.getPara("ids");
renderJson(Ret.fail()); if (ids.length() == 0) {
} renderJson(Ret.fail());
boolean deleted = this.messageService.deleteMessage(ids.split(",")); }
if (deleted) { boolean deleted = this.messageService.deleteMessage(ids.split(","));
renderJson(Ret.ok()); if (deleted) {
logService.saveAsLog("operate", "个人首页-消息中心-删除消息-" + "-已删除了"+ids.split(",").length+"个消息", FinalStringUtil.DELETE); renderJson(Ret.ok());
}else { logService.saveAsLog("operate", "个人首页-消息中心-删除消息-" + "-已删除了"+ids.split(",").length+"个消息", FinalStringUtil.DELETE);
renderJson(Ret.fail()); }else {
logService.saveAsLog("operate", "个人首页-消息中心-删除消息-删除消息失败",FinalStringUtil.DELETE); renderJson(Ret.fail());
} logService.saveAsLog("operate", "个人首页-消息中心-删除消息-删除消息失败",FinalStringUtil.DELETE);
} }
}
/**
* 根据指定用户更新websocket的消息 /**
*/ * 根据指定用户更新websocket的消息
@Clear(JwtInterceptor.class) */
public void refreshMessage() { @Clear(JwtInterceptor.class)
try { public void refreshMessage() {
String userId = this.getPara("userId"); try {
if (StrKit.isBlank(userId)) { String userId = this.getPara("userId");
userId = IOUtils.toString(this.getRequest().getInputStream()); if (StrKit.isBlank(userId)) {
userId = JSON.parseObject(userId).getString("userId"); userId = IOUtils.toString(this.getRequest().getInputStream());
} userId = JSON.parseObject(userId).getString("userId");
logger.error("接受到消息刷新" + userId); }
if (StrKit.notBlank(userId)) { logger.error("接受到消息刷新" + userId);
boolean refrashed = MessageRefreshTrigger.refresh(userId); if (StrKit.notBlank(userId)) {
renderJson(Ret.ok("refrashed", refrashed)); boolean refrashed = MessageRefreshTrigger.refresh(userId);
} else { renderJson(Ret.ok("refrashed", refrashed));
renderJson(Ret.fail("msg", "userId为null或userId不是一个数字")); } else {
} renderJson(Ret.fail("msg", "userId为null或userId不是一个数字"));
} catch (Exception e) { }
logger.error("刷新消息出错", e); } catch (Exception e) {
renderJson(Ret.fail("msg", "刷新消息出错")); logger.error("刷新消息出错", e);
} renderJson(Ret.fail("msg", "刷新消息出错"));
}
}
}
/**
* LiuKexin 20210402 批量标记为已读,且将通知性消息标为已读,下载或跳转的消息不批量已读 /**
*/ * LiuKexin 20210402 批量标记为已读,且将通知性消息标为已读,下载或跳转的消息不批量已读
public void allMsgReaded() { */
String username = this.getAttr("username"); public void allMsgReaded() {
Ret allMsgReaded = messageService.allMsgReaded(username); String username = this.getAttr("username");
renderJson(allMsgReaded); Ret allMsgReaded = messageService.allMsgReaded(username);
} renderJson(allMsgReaded);
}
}
}
package com.archser.aserver.itask; package com.archser.aserver.itask;
import com.archser.aserver.model.Organ; import com.archser.commons.db.InfoOrgan;
import com.archser.aserver.model.System; import com.archser.commons.db.InfoSystem;
import com.archser.aserver.model.User; import com.archser.commons.db.InfoUser;
import com.archser.aserver.util.redis.InfoOrgan; import com.archser.commons.model.AsOrgan;
import com.archser.aserver.util.redis.InfoSystem; import com.archser.commons.model.AsSystem;
import com.archser.aserver.util.redis.InfoUser; import com.archser.commons.model.AsUser;
import com.jfinal.kit.PropKit; import com.jfinal.kit.PropKit;
import com.jfinal.plugin.cron4j.ITask; import com.jfinal.plugin.cron4j.ITask;
...@@ -25,13 +25,13 @@ public class GoodSync implements ITask { ...@@ -25,13 +25,13 @@ public class GoodSync implements ITask {
if (PropKit.getBoolean("updateRedis")) { if (PropKit.getBoolean("updateRedis")) {
// 同步用户数据 // 同步用户数据
java.lang.System.err.println("同步用户信息"); java.lang.System.err.println("同步用户信息");
User.dao.findAll().forEach(InfoUser::saveUser); AsUser.dao.findAll().forEach(InfoUser::saveUser);
// 同步系统数据 // 同步系统数据
java.lang.System.err.println("同步系统数据"); java.lang.System.err.println("同步系统数据");
System.dao.findAll().forEach(InfoSystem::saveSystem); AsSystem.dao.findAll().forEach(InfoSystem::saveSystem);
// 同步机构数据 // 同步机构数据
java.lang.System.err.println("同步机构数据"); java.lang.System.err.println("同步机构数据");
Organ.dao.findAll().forEach(InfoOrgan::saveOrgan); AsOrgan.dao.findAll().forEach(InfoOrgan::saveOrgan);
} }
} }
......
package com.archser.aserver.util.redis;
import com.alibaba.fastjson.JSONObject;
import com.archser.aserver.model.Organ;
/**
* 20201127 lidecai
* 操作redis中的机构信息
*/
public class InfoOrgan {
private static final String ORGAN = "ORGAN_";
/**
* 保存机构信息
*
* @param organ
* @return
*/
public static boolean saveOrgan(Organ organ) {
return RedisConvert.saveObject(ORGAN + organ.getId(), organ);
}
/**
* 获取机构信息
* @param organId
* @return
*/
public static Organ getOrgan(Integer organId){
Object organObj = RedisConvert.getObject(ORGAN + organId);
Organ organ = JSONObject.parseObject(JSONObject.toJSONString(organObj), Organ.class);
if(organ == null ){
organ = Organ.dao.findById(organId);
saveOrgan(organ);
}
return JSONObject.parseObject(JSONObject.toJSONString(organObj), Organ.class);
}
}
package com.archser.aserver.util.redis;
import com.alibaba.fastjson.JSONObject;
import com.archser.aserver.model.System;
import com.jfinal.plugin.redis.Redis;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.Set;
/**
* 获取系统信息 20201126 lidecai
*/
public class InfoSystem {
private static final String _INFO = "_INFO";
private static final String SYSTEM = "SYSTEM_";
/**
* 根据名称获取系统信息
*
* @param systemName
* @return
*/
public static System getSystem(String systemName) {
Object object = RedisConvert.getObject(SYSTEM + systemName + _INFO);
System system = JSONObject.parseObject(JSONObject.toJSONString(object), System.class);
if (system == null || system.getKeyid() == null) {
return getSystemByDatabase(systemName);
}
return system;
}
/**
* 备用方案,从数据库获取
*
* @param systemName
* @return
*/
public static System getSystemByDatabase(String systemName) {
System system = System.dao.template("getSystemPrivatekey", systemName).findFirst();
RedisConvert.saveObject(SYSTEM + systemName + _INFO, system);
return system;
}
/**
* 获取所有系统
* @return
*/
public static List<System> getAllSystem() {
Set<String> keys = Redis.use().keys(SYSTEM + "*");
List<System> systemList = new ArrayList<System>();
keys.forEach(system -> {
systemList.add(JSONObject
.parseObject(JSONObject.toJSONString(Redis.use().hgetAll(system)), System.class));
});
return systemList;
}
/**
* 保存系统信息
*
* @param system
* @return
*/
public static boolean saveSystem(System system) {
return RedisConvert.saveObject(SYSTEM + system.getName() + _INFO, system);
}
/**
* 删除系统信息
*
* @param systemName
* @return
*/
public static boolean deleteSystem(String systemName) {
return RedisConvert.deleteKey(SYSTEM + systemName + _INFO) > 0;
}
}
package com.archser.aserver.util.redis;
import com.archser.aserver.model.User;
import com.jfinal.kit.JsonKit;
/**
* 20201127 lidecai 操作redis中的用户信息
*/
public class InfoUser {
private static final String _INFO = "_INFO";
private static final String USER = "USER_";
/**
* 获取用户信息
*
* @param userName
* @return
*/
public static User getUser(String userName) {
Object object = RedisConvert.getObject(USER + userName + _INFO);
User user = JsonKit.parse(JsonKit.toJson(object), User.class);
if (user.getId() == null) {
User userByDataBase = getUserByDataBase(userName);
saveUser(userByDataBase);
return userByDataBase;
}
return user;
}
public static boolean saveUser(User user) {
return RedisConvert.saveObject(USER + user.getUsername() + _INFO, user);
}
/**
* 备用方案,从数据库获取用户信息
*
* @param userName
* @return
*/
public static User getUserByDataBase(String userName) {
return User.dao.template("getUser", userName).findFirst();
}
}
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