From fcc1ac0ee263d12d50cf28923975a08b7453fdcd Mon Sep 17 00:00:00 2001
From: 18616268358 <1440265357@qq.com>
Date: Sat, 20 May 2023 17:47:52 +0800
Subject: [PATCH] =?UTF-8?q?#20230510=20=E6=AC=A3=E5=BD=B1=E7=AE=A1?=
=?UTF-8?q?=E7=90=86=E5=B9=B3=E5=8F=B0=E8=A3=85=E7=BD=AE=E4=BF=A1=E6=81=AF?=
=?UTF-8?q?=E6=9F=A5=E8=AF=A2=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
pom.xml | 16 ++
.../controller/SysLoginController.java | 84 ++++++
.../controller/TerminalController.java | 2 +-
.../src/main/resources/application-test.yml | 4 +
xymanager_common/pom.xml | 25 ++
.../xymanager_common/base/AjaxResult.java | 148 ++++++++++
.../shxy/xymanager_common/bean/SysDept.java | 264 ++++++++++++++++++
.../shxy/xymanager_common/bean/SysUser.java | 66 +++++
.../xymanager_common/bean/SysUserOnline.java | 117 ++++++++
.../xymanager_common/bean/SysUserPost.java | 52 ++++
.../config/CustomRsaProperties.java | 32 +++
.../constant/HttpStatusCode.java | 106 +++++++
.../xymanager_common/constant/UserStatus.java | 34 +++
.../xymanager_common/constant/UuidUtils.java | 16 ++
.../shxy/xymanager_common/entity/SysUser.java | 50 ++++
.../xymanager_common/entity/UserSession.java | 22 ++
.../exception/CustomException.java | 43 +++
.../UserPasswordNotMatchException.java | 48 ++++
.../manager/AsyncManager.java | 63 +++++
.../manager/factory/AsyncFactory.java | 76 +++++
.../xymanager_common/model/SysLoginLog.java | 134 +++++++++
.../xymanager_common/security/LoginUser.java | 214 ++++++++++++++
.../CustomAuthExceptionEntryPoint.java | 44 +++
.../shxy/xymanager_common/util/LogUtils.java | 22 ++
.../com/shxy/xymanager_common/util/Md5.java | 63 +++++
.../shxy/xymanager_common/util/RsaUtils.java | 186 ++++++++++++
.../xymanager_common/util/SecurityUtils.java | 92 ++++++
.../shxy/xymanager_common/util/Threads.java | 96 +++++++
.../xymanager_common/util/http/HttpUtils.java | 190 +++++++++++++
.../shxy/xymanager_common/vo/SysUserVo.java | 26 ++
.../xymanager_dao/dao/SysUserMapperDao.java | 94 +++++++
.../resources/mappers/SysUserMapperDao.xml | 85 ++++++
xymanager_service/pom.xml | 5 +
.../impl/CustomPermissionServiceImpl.java | 44 +++
.../impl/CustomUserDetailsServiceImpl.java | 51 ++++
.../impl/LoginServiceImpl.java | 112 ++++++++
.../impl/LogoutSuccessHandlerImpl.java | 35 +++
.../impl/SysUserServiceImpl.java | 176 ++++++++++++
.../service/CustomPermissionService.java | 22 ++
.../service/CustomUserDetailsService.java | 20 ++
.../service/LoginService.java | 41 +++
.../service/SysUserService.java | 128 +++++++++
.../security/CustomSecurityConfig.java | 113 ++++++++
.../JwtAuthenticationTokenFilter.java | 64 +++++
44 files changed, 3324 insertions(+), 1 deletion(-)
create mode 100644 xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/SysLoginController.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/base/AjaxResult.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysDept.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUser.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserOnline.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserPost.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/config/CustomRsaProperties.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/constant/HttpStatusCode.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UserStatus.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UuidUtils.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/entity/SysUser.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/entity/UserSession.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/exception/CustomException.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/exception/UserPasswordNotMatchException.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/manager/AsyncManager.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/manager/factory/AsyncFactory.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/model/SysLoginLog.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/security/LoginUser.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/security/componet/CustomAuthExceptionEntryPoint.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/LogUtils.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/Md5.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/RsaUtils.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/SecurityUtils.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/Threads.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/util/http/HttpUtils.java
create mode 100644 xymanager_common/src/main/java/com/shxy/xymanager_common/vo/SysUserVo.java
create mode 100644 xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/SysUserMapperDao.java
create mode 100644 xymanager_dao/src/main/resources/mappers/SysUserMapperDao.xml
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomPermissionServiceImpl.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomUserDetailsServiceImpl.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LoginServiceImpl.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LogoutSuccessHandlerImpl.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/impl/SysUserServiceImpl.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/CustomPermissionService.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/CustomUserDetailsService.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/LoginService.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/SysUserService.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/security/CustomSecurityConfig.java
create mode 100644 xymanager_service/src/main/java/com/shxy/xymanager_service/service/security/JwtAuthenticationTokenFilter.java
diff --git a/pom.xml b/pom.xml
index 8e6f091..91c03da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -30,6 +30,8 @@
2.2.0
1.4.0
1.4
+ 0.9.0
+ 3.2.0
@@ -58,6 +60,7 @@
${mybatis-spring-boot.version}
+
com.github.pagehelper
@@ -72,6 +75,12 @@
${swagger.version}
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
com.github.xiaoymin
@@ -99,6 +108,13 @@
${fastjson.version}
+
+ io.jsonwebtoken
+ jjwt
+ ${jwt.version}
+
+
+
diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/SysLoginController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/SysLoginController.java
new file mode 100644
index 0000000..37a41bc
--- /dev/null
+++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/SysLoginController.java
@@ -0,0 +1,84 @@
+package com.shxy.xymanager_admin.controller;
+
+
+import com.shxy.xymanager_common.base.AjaxResult;
+import com.shxy.xymanager_common.base.ResponseReult;
+import com.shxy.xymanager_common.bean.ServiceBody;
+import com.shxy.xymanager_common.bean.ServiceStatus;
+import com.shxy.xymanager_common.bean.SysUser;
+import com.shxy.xymanager_common.constant.Constants;
+import com.shxy.xymanager_common.model.TerminalListModel;
+import com.shxy.xymanager_common.security.LoginUser;
+import com.shxy.xymanager_common.util.ServletUtils;
+import com.shxy.xymanager_common.vo.SysUserVo;
+import com.shxy.xymanager_service.service.LoginService;
+import com.shxy.xymanager_service.service.SysUserService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.ApiResponse;
+import io.swagger.annotations.ApiResponses;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(value = "登录验证", tags = "登录验证")
+@RestController
+@Slf4j
+public class SysLoginController {
+
+
+ @Autowired
+ private LoginService loginService;
+
+ @Autowired
+ SysUserService sysUserService;
+
+
+
+
+ /**
+ * @Description 登录方法
+ *
+ * @param sysUser
+ * @return ResponseReult
+ */
+ @ApiOperation(value = "登录", notes = "登录", httpMethod = "POST")
+ @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")})
+ @RequestMapping("/login")
+ public ResponseReult login(@RequestBody SysUser sysUser) throws Exception {
+ ServiceBody serviceBody = loginService.remoteLogin(sysUser.getUserName(), sysUser.getPassword());
+ if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
+ return ResponseReult.success(serviceBody.getData());
+ } else {
+ return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg());
+ }
+ }
+
+
+
+
+
+ /**
+ * 新增用户
+ *
+ * @param vo
+ * @return
+ */
+
+ @ApiOperation(value = "新增用户", notes = "新增用户", httpMethod = "POST")
+ @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")})
+ @RequestMapping("/addUser")
+ public ResponseReult add(@RequestBody @Validated SysUserVo vo) {
+ ServiceBody serviceBody = sysUserService.addUser(vo);
+ if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
+ return ResponseReult.success(serviceBody.getData());
+ } else {
+ return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg());
+ }
+ }
+
+
+
+
+}
diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java
index bfbde40..9a23200 100644
--- a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java
+++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/TerminalController.java
@@ -94,7 +94,7 @@ public class TerminalController extends BaseController {
@ApiOperation(value = "获取装置触发", notes = "获取装置信息接口", httpMethod = "POST")
@ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")})
@RequestMapping("/getTerminalStatus")
- @Log(title = "获取装置运行状态触发", type = "修改")
+ @Log(title = "获取装置触发", type = "修改")
public ResponseReult getTerminalStatus(@RequestParam("termId")Integer termId) {
ServiceBody serviceBody = terminalService.getTerminalStatus(termId);
if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
diff --git a/xymanager_admin/src/main/resources/application-test.yml b/xymanager_admin/src/main/resources/application-test.yml
index 4e62ec3..b8c3ffa 100644
--- a/xymanager_admin/src/main/resources/application-test.yml
+++ b/xymanager_admin/src/main/resources/application-test.yml
@@ -175,3 +175,7 @@ photo:
address: http://47.96.238.157/photos/
video:
address: http://47.96.238.157/videos/
+rsa:
+ public_key: MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCViq0L+1XCTKOkt9nmy9aQbMRNNJNBOtPYRlCq/bRuwlYaq/I+XqSDkIF8s4JJSy3/Vgjw0fp8d4O+5KBS4Om9Ela60I2Vv/q8LjCNFNYbRE6xI7yrlyPukodmC/s1VgODDRHn3vVyKcK9nyF7xZsXixnlvltAky888CJkLpiGjQIDAQAB
+ private_key: MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAJWKrQv7VcJMo6S32ebL1pBsxE00k0E609hGUKr9tG7CVhqr8j5epIOQgXyzgklLLf9WCPDR+nx3g77koFLg6b0SVrrQjZW/+rwuMI0U1htETrEjvKuXI+6Sh2YL+zVWA4MNEefe9XIpwr2fIXvFmxeLGeW+W0CTLzzwImQumIaNAgMBAAECgYAzOn2LlD9Nv5lzzTPNl9jaQxiAZllnyDJYbcYmvaD5LIP4wRzMdvmexHtHb+tbFnEcfqmzbguEZiDw3Tt7COepQWvNzlM+/HbFtkXzSh6WEu2TgjZwudcCDHDyjDzUNgcWnBIw8/+Sy4COOm4p+UnprYK4sdriMZyz8K5UC8CxFQJBAODTt0lg/HiZKaOX7PMmsiRisd5oAslyDHCt66oPG29KTE1j4fwKDzGJlrOo1f4Q078IDYMO1I/Y3uP8Es3FT1MCQQCqRrD+lO3YCZOUGTHm2WGmbljIoeDpnIn2TZFyqDGKXs6EAx7SXkgarY2OC5O2aifMhXElPUGChfSgPmRUFHafAkEAxFtkWuwf1NxAJ6cKxZpoP6sLGenRdUrsXoUnrBEhruM/HOA9gLjwaB14x1SQASOFK/TGiE4ti6ynjoqbiafoDQJBAI0l6FZAsiBhX9pmQD1yeUXzNtmphr1gK+TmS+lVjyt6h4pa49PSn8atkyfqZNnTiYY6H56U9pbx3+Rtk9E23VUCQEZ9/JHUaGc77s3ibpcKFVemlb0i/Uvj2V45aoNfY34iex4biAUsRq/FJNiqBk+xQWkJ4QY8nKVE45GlaCfZ8/c=
+
diff --git a/xymanager_common/pom.xml b/xymanager_common/pom.xml
index fbfa642..d90f373 100644
--- a/xymanager_common/pom.xml
+++ b/xymanager_common/pom.xml
@@ -51,6 +51,12 @@
knife4j-spring-boot-starter
+
+ eu.bitwalker
+ UserAgentUtils
+ 1.21
+
+
io.swagger
@@ -76,6 +82,20 @@
fastjson
+
+ org.apache.commons
+ commons-lang3
+
+
+
+
+ commons-codec
+ commons-codec
+ 1.11
+
+
+
+
commons-fileupload
@@ -104,6 +124,11 @@
spring-boot-starter-validation
+
+ org.springframework.boot
+ spring-boot-starter-security
+
+
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/base/AjaxResult.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/base/AjaxResult.java
new file mode 100644
index 0000000..0b9538d
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/base/AjaxResult.java
@@ -0,0 +1,148 @@
+package com.shxy.xymanager_common.base;
+
+
+
+
+import com.shxy.xymanager_common.constant.HttpStatusCode;
+
+import java.util.HashMap;
+
+/**
+ * @ClassName:AjaxResult
+ * @Description: Ajax操作返回
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 12:51 PM
+ * @Version V1.0
+ */
+public class AjaxResult extends HashMap {
+
+ /**
+ * 状态码
+ */
+ public static final String CODE_TAG = "code";
+
+ /**
+ * 返回内容
+ */
+ public static final String MSG_TAG = "msg";
+
+ /**
+ * 数据对象
+ */
+ public static final String DATA_TAG = "data";
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象,使其表示一个空消息。
+ */
+ public AjaxResult() {
+
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ */
+ public AjaxResult(int code, String msg) {
+ super.put(CODE_TAG, code);
+ super.put(MSG_TAG, msg);
+ }
+
+ /**
+ * 初始化一个新创建的 AjaxResult 对象
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ * @param data 数据对象
+ */
+ public AjaxResult(int code, String msg, Object data) {
+ super.put(CODE_TAG, code);
+ super.put(MSG_TAG, msg);
+ if (data != null) {
+ super.put(DATA_TAG, data);
+ }
+ }
+
+
+ /**
+ * 返回成功消息
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success() {
+ return AjaxResult.success("操作成功");
+ }
+
+ /**
+ * 返回成功数据
+ *
+ * @return 成功消息
+ */
+ public static AjaxResult success(Object data) {
+ return AjaxResult.success("操作成功", data);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg) {
+ return AjaxResult.success(msg, null);
+ }
+
+ /**
+ * 返回成功消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 成功消息
+ */
+ public static AjaxResult success(String msg, Object data) {
+ return new AjaxResult(HttpStatusCode.SUCCESS, msg, data);
+ }
+
+
+ /**
+ * 返回错误消息
+ *
+ * @return
+ */
+ public static AjaxResult error() {
+ return AjaxResult.error("操作失败");
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg) {
+ return AjaxResult.error(msg, null);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param msg 返回内容
+ * @param data 数据对象
+ * @return 警告消息
+ */
+ public static AjaxResult error(String msg, Object data) {
+ return new AjaxResult(HttpStatusCode.ERROR, msg, data);
+ }
+
+ /**
+ * 返回错误消息
+ *
+ * @param code 状态码
+ * @param msg 返回内容
+ * @return 警告消息
+ */
+ public static AjaxResult error(int code, String msg) {
+ return new AjaxResult(code, msg, null);
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysDept.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysDept.java
new file mode 100644
index 0000000..d23aa32
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysDept.java
@@ -0,0 +1,264 @@
+package com.shxy.xymanager_common.bean;
+
+import io.swagger.annotations.ApiModelProperty;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+
+/**
+ * @ClassName:SysDept
+ * @Description: 部门表.
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 8:50 PM
+ * @Version V1.0
+ */
+
+public class SysDept {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * 部门id
+ */
+ @ApiModelProperty(value="部门id", name="dept_id")
+ private Long deptId;
+
+ /**
+ * 父部门id
+ */
+ @ApiModelProperty(value="父部门id", name="parentId")
+ private Long parentId;
+
+ /**
+ * 祖级列表
+ */
+ private String ancestors;
+
+ /**
+ * 部门名称
+ */
+ @ApiModelProperty(value="部门名称", name="deptName")
+ private String deptName;
+
+ /**
+ * 显示顺序
+ */
+ @ApiModelProperty(value="显示顺序", name="orderNum")
+ private Integer orderNum;
+
+ /**
+ * 负责人
+ */
+ private String leader;
+
+ /**
+ * 联系电话
+ */
+ private String phone;
+
+ /**
+ * 邮箱
+ */
+ private String email;
+
+ /**
+ * 部门状态(0正常 1停用)
+ */
+ private String status;
+
+ /**
+ * 删除标志(0代表存在 1代表删除)
+ */
+ @ApiModelProperty(value="删除标志(0代表存在 1代表删除)", name="delFlag")
+ private String delFlag;
+
+ /**
+ * 创建者
+ */
+ @ApiModelProperty(value="创建者", name="createBy")
+ private String createBy;
+
+ /**
+ * 创建时间
+ */
+ @ApiModelProperty(value="创建时间", name="createTime")
+ private Date createTime;
+
+ /**
+ * 更新者
+ */
+ @ApiModelProperty(value="更新者", name="updateBy")
+ private String updateBy;
+
+ /**
+ * 更新时间
+ */
+ @ApiModelProperty(value="更新时间", name="updateTime")
+ private Date updateTime;
+
+
+ /**
+ * 父部门名称
+ * */
+
+ private String parentName;
+
+ /**
+ * 子部门
+ * */
+
+ private List children = new ArrayList();
+
+
+
+
+ public Long getDeptId() {
+ return deptId;
+ }
+
+ public void setDeptId(Long deptId) {
+ this.deptId = deptId;
+ }
+
+ public Long getParentId() {
+ return parentId;
+ }
+
+ public void setParentId(Long parentId) {
+ this.parentId = parentId;
+ }
+
+ public String getAncestors() {
+ return ancestors;
+ }
+
+ public void setAncestors(String ancestors) {
+ this.ancestors = ancestors;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public Integer getOrderNum() {
+ return orderNum;
+ }
+
+ public void setOrderNum(Integer orderNum) {
+ this.orderNum = orderNum;
+ }
+
+ public String getLeader() {
+ return leader;
+ }
+
+ public void setLeader(String leader) {
+ this.leader = leader;
+ }
+
+ public String getPhone() {
+ return phone;
+ }
+
+ public void setPhone(String phone) {
+ this.phone = phone;
+ }
+
+ public String getEmail() {
+ return email;
+ }
+
+ public void setEmail(String email) {
+ this.email = email;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getDelFlag() {
+ return delFlag;
+ }
+
+ public void setDelFlag(String delFlag) {
+ this.delFlag = delFlag;
+ }
+
+ public String getCreateBy() {
+ return createBy;
+ }
+
+ public void setCreateBy(String createBy) {
+ this.createBy = createBy;
+ }
+
+ public Date getCreateTime() {
+ return createTime;
+ }
+
+ public void setCreateTime(Date createTime) {
+ this.createTime = createTime;
+ }
+
+ public String getUpdateBy() {
+ return updateBy;
+ }
+
+ public void setUpdateBy(String updateBy) {
+ this.updateBy = updateBy;
+ }
+
+ public Date getUpdateTime() {
+ return updateTime;
+ }
+
+ public void setUpdateTime(Date updateTime) {
+ this.updateTime = updateTime;
+ }
+
+ public String getParentName() {
+ return parentName;
+ }
+
+ public void setParentName(String parentName) {
+ this.parentName = parentName;
+ }
+
+ public List getChildren() {
+ return children;
+ }
+
+ public void setChildren(List children) {
+ this.children = children;
+ }
+
+ @Override
+ public String toString() {
+ return "SysDept{" +
+ ", deptId=" + deptId +
+ ", parentId=" + parentId +
+ ", ancestors=" + ancestors +
+ ", deptName=" + deptName +
+ ", orderNum=" + orderNum +
+ ", leader=" + leader +
+ ", phone=" + phone +
+ ", email=" + email +
+ ", status=" + status +
+ ", delFlag=" + delFlag +
+ ", createBy=" + createBy +
+ ", createTime=" + createTime +
+ ", updateBy=" + updateBy +
+ ", updateTime=" + updateTime +
+ "}";
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUser.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUser.java
new file mode 100644
index 0000000..2f45b63
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUser.java
@@ -0,0 +1,66 @@
+package com.shxy.xymanager_common.bean;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.util.Date;
+
+/**
+ * @ClassName:SysUser
+ * @Description: 用户信息表
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 2:25 PM
+ * @Version V1.0
+ */
+@Data
+public class SysUser {
+
+ /**
+ * 用户ID
+ */
+ @ApiModelProperty(value="用户ID", name="user_id")
+ private Long userId;
+
+ /**
+ * 用户账号
+ */
+ @ApiModelProperty(value="用户账号", name="userAccount")
+ private String userName;
+
+ /**
+ * 用户昵称
+ */
+ @ApiModelProperty(value="用户昵称", name="nickName")
+ private String nickName;
+
+ /**
+ * 用户角色
+ */
+ @ApiModelProperty(value="用户角色", name="role")
+ private String role;
+
+ /**
+ * 密码
+ */
+
+ private String password;
+
+ /**
+ * 帐号状态(0正常 1停用)
+ */
+
+ private String status;
+
+
+
+ public SysUser() {
+ }
+
+ public SysUser(Long userId) {
+ this.userId = userId;
+ }
+
+
+
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserOnline.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserOnline.java
new file mode 100644
index 0000000..970a6fc
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserOnline.java
@@ -0,0 +1,117 @@
+package com.shxy.xymanager_common.bean;
+
+
+import java.io.Serializable;
+
+/**
+ * @ClassName:SysUserOnline
+ * @Description: 当前在线会话
+ * @Author: Arno_Fu
+ * @CreatTime:12/23/2019 - 4:22 PM
+ * @Version V1.0
+ */
+public class SysUserOnline implements Serializable {
+ /**
+ * 会话编号
+ */
+ private String tokenId;
+
+ /**
+ * 部门名称
+ */
+ private String deptName;
+
+ /**
+ * 用户名称
+ */
+ private String userName;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地址
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 登录时间
+ */
+ private Long loginTime;
+
+ public String getTokenId() {
+ return tokenId;
+ }
+
+ public void setTokenId(String tokenId) {
+ this.tokenId = tokenId;
+ }
+
+ public String getDeptName() {
+ return deptName;
+ }
+
+ public void setDeptName(String deptName) {
+ this.deptName = deptName;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getIpaddr() {
+ return ipaddr;
+ }
+
+ public void setIpaddr(String ipaddr) {
+ this.ipaddr = ipaddr;
+ }
+
+ public String getLoginLocation() {
+ return loginLocation;
+ }
+
+ public void setLoginLocation(String loginLocation) {
+ this.loginLocation = loginLocation;
+ }
+
+ public String getBrowser() {
+ return browser;
+ }
+
+ public void setBrowser(String browser) {
+ this.browser = browser;
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public void setOs(String os) {
+ this.os = os;
+ }
+
+ public Long getLoginTime() {
+ return loginTime;
+ }
+
+ public void setLoginTime(Long loginTime) {
+ this.loginTime = loginTime;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserPost.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserPost.java
new file mode 100644
index 0000000..8d4bb16
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/bean/SysUserPost.java
@@ -0,0 +1,52 @@
+package com.shxy.xymanager_common.bean;
+
+import org.apache.commons.lang3.builder.ToStringBuilder;
+import org.apache.commons.lang3.builder.ToStringStyle;
+
+import java.io.Serializable;
+
+
+/**
+ * @ClassName:SysUserPost
+ * @Description: 用户和岗位关联 sys_user_post
+ * @Author: Arno_Fu
+ * @CreatTime:12/19/2019 - 5:06 PM
+ * @Version V1.0
+ */
+
+public class SysUserPost implements Serializable
+{
+ /** 用户ID */
+ private Long userId;
+
+ /** 岗位ID */
+ private Long postId;
+
+ public Long getUserId()
+ {
+ return userId;
+ }
+
+ public void setUserId(Long userId)
+ {
+ this.userId = userId;
+ }
+
+ public Long getPostId()
+ {
+ return postId;
+ }
+
+ public void setPostId(Long postId)
+ {
+ this.postId = postId;
+ }
+
+ @Override
+ public String toString() {
+ return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
+ .append("userId", getUserId())
+ .append("postId", getPostId())
+ .toString();
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/config/CustomRsaProperties.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/config/CustomRsaProperties.java
new file mode 100644
index 0000000..88dae7d
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/config/CustomRsaProperties.java
@@ -0,0 +1,32 @@
+package com.shxy.xymanager_common.config;
+
+import lombok.Data;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Component;
+
+
+/**
+ * @ClassName:RsaProperties
+ * @Description: 秘钥
+ * @Author: Arno_Fu
+ * @CreatTime:12/29/2020 - 11:37 AM
+ * @Version V1.0
+ */
+@Data
+@Component
+public class CustomRsaProperties {
+
+ public static String privateKey;
+
+ public static String publicKey;
+
+ @Value("${rsa.private_key}")
+ public void setPrivateKey(String privateKey) {
+ CustomRsaProperties.privateKey = privateKey;
+ }
+
+ @Value("${rsa.public_key}")
+ public void setPublicKey(String publicKey) {
+ CustomRsaProperties.publicKey = publicKey;
+ }
+}
\ No newline at end of file
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/HttpStatusCode.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/HttpStatusCode.java
new file mode 100644
index 0000000..5591d89
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/HttpStatusCode.java
@@ -0,0 +1,106 @@
+package com.shxy.xymanager_common.constant;
+
+
+/**
+ *
+ * @Description: 返回状态码
+ *
+ * @Author: Arno_Fu
+ *
+ * @Since: 11/26/2019 11:21 AM
+ *
+ * @Version: 1.0.0
+
+ **/
+public interface HttpStatusCode
+{
+ /**
+ * 操作成功
+ */
+ public static final int SUCCESS = 200;
+
+ /**
+ * 对象创建成功
+ */
+ public static final int CREATED = 201;
+
+ /**
+ * 请求已经被接受
+ */
+ public static final int ACCEPTED = 202;
+
+ /**
+ * 操作已经执行成功,但是没有返回数据
+ */
+ public static final int NO_CONTENT = 204;
+
+ /**
+ * 资源已被移除
+ */
+ public static final int MOVED_PERM = 301;
+
+ /**
+ * 重定向
+ */
+ public static final int SEE_OTHER = 303;
+
+ /**
+ * 资源没有被修改
+ */
+ public static final int NOT_MODIFIED = 304;
+
+ /**
+ * 参数列表错误(缺少,格式不匹配)
+ */
+ public static final int BAD_REQUEST = 400;
+
+ /**
+ * 未授权
+ */
+ public static final int UNAUTHORIZED = 401;
+
+ /**
+ * 访问受限,授权过期
+ */
+ public static final int FORBIDDEN = 403;
+
+ /**
+ * 资源,服务未找到
+ */
+ public static final int NOT_FOUND = 404;
+
+ /**
+ * 不允许的http方法
+ */
+ public static final int BAD_METHOD = 405;
+
+ /**
+ * 资源冲突,或者资源被锁
+ */
+ public static final int CONFLICT = 409;
+
+ /**
+ * 不支持的数据,媒体类型
+ */
+ public static final int UNSUPPORTED_TYPE = 415;
+
+ /**
+ * 系统内部错误
+ */
+ public static final int ERROR = 500;
+
+ /**
+ * 接口未实现
+ */
+ public static final int NOT_IMPLEMENTED = 501;
+
+ /**
+ * token无效
+ */
+ public static final int TOKEN_INVALID= 601;
+
+ /**
+ * 暂无数据
+ */
+ public static final int NO_DATA = 10000;
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UserStatus.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UserStatus.java
new file mode 100644
index 0000000..62ab1d1
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UserStatus.java
@@ -0,0 +1,34 @@
+package com.shxy.xymanager_common.constant;
+
+
+/**
+ * @ClassName:UserStatus
+ * @Description: 用户状态
+ * @Author: Arno_Fu
+ * @CreatTime:12/23/2019 - 4:48 PM
+ * @Version V1.0
+ */
+
+public enum UserStatus
+{
+ OK("0", "正常"), DISABLE("1", "停用"), DELETED("2", "删除");
+
+ private final String code;
+ private final String info;
+
+ UserStatus(String code, String info)
+ {
+ this.code = code;
+ this.info = info;
+ }
+
+ public String getCode()
+ {
+ return code;
+ }
+
+ public String getInfo()
+ {
+ return info;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UuidUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UuidUtils.java
new file mode 100644
index 0000000..c04c2f2
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/UuidUtils.java
@@ -0,0 +1,16 @@
+package com.shxy.xymanager_common.constant;
+
+
+import java.util.UUID;
+
+/**
+ * Uuid Utils
+ * @author Jordan_Li
+ *
+ */
+public class UuidUtils {
+
+ public static String getUUID() {
+ return UUID.randomUUID().toString().replace("-", "");
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/SysUser.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/SysUser.java
new file mode 100644
index 0000000..29b2d9d
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/SysUser.java
@@ -0,0 +1,50 @@
+package com.shxy.xymanager_common.entity;
+
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * @ClassName:SysUser
+ * @Description: 用户信息表
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 2:25 PM
+ * @Version V1.0
+ */
+@Data
+public class SysUser {
+
+ /**
+ * 用户ID
+ */
+ @ApiModelProperty(value="用户ID", name="user_id")
+ private Long userId;
+
+ /**
+ * 用户账号
+ */
+ @ApiModelProperty(value="用户账号", name="userAccount")
+ private String userName;
+
+ /**
+ * 用户昵称
+ */
+ @ApiModelProperty(value="用户昵称", name="nickName")
+ private String nickName;
+
+ /**
+ * 密码盐
+ */
+ private String passwordSalt;
+
+ /**
+ * 密码
+ */
+ private String password;
+
+ /**
+ * 帐号状态(0正常 1停用)
+ */
+ private String status;
+
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/UserSession.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/UserSession.java
new file mode 100644
index 0000000..b578311
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/UserSession.java
@@ -0,0 +1,22 @@
+package com.shxy.xymanager_common.entity;
+
+import lombok.Data;
+
+import java.io.Serializable;
+import java.math.BigInteger;
+
+@Data
+public class UserSession implements Serializable {
+ private BigInteger id;
+
+ private String sessionId;
+
+ private String userName;
+
+ private String role;
+
+ private BigInteger expireTime;
+
+ private static final long serialVersionUID = 1L;
+
+}
\ No newline at end of file
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/CustomException.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/CustomException.java
new file mode 100644
index 0000000..4feb834
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/CustomException.java
@@ -0,0 +1,43 @@
+package com.shxy.xymanager_common.exception;
+
+/**
+ * 自定义异常
+ *
+ * @author ruoyi
+ */
+public class CustomException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+ private Integer code;
+
+ private String message;
+
+ public CustomException(String message)
+ {
+ this.message = message;
+ }
+
+ public CustomException(String message, Integer code)
+ {
+ this.message = message;
+ this.code = code;
+ }
+
+ public CustomException(String message, Throwable e)
+ {
+ super(message, e);
+ this.message = message;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public Integer getCode()
+ {
+ return code;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/UserPasswordNotMatchException.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/UserPasswordNotMatchException.java
new file mode 100644
index 0000000..1966efc
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/exception/UserPasswordNotMatchException.java
@@ -0,0 +1,48 @@
+package com.shxy.xymanager_common.exception;
+
+
+/**
+ * @ClassName:UserPasswordNotMatchException
+ * @Description: 用户密码不正确或不符合规范异常类
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 10:07 PM
+ * @Version V1.0
+ */
+
+public class UserPasswordNotMatchException extends RuntimeException
+{
+ private static final long serialVersionUID = 1L;
+
+
+ private Integer code;
+
+ private String message;
+
+ public UserPasswordNotMatchException(String message)
+ {
+ this.message = message;
+ }
+
+ public UserPasswordNotMatchException(String message, Integer code)
+ {
+ this.message = message;
+ this.code = code;
+ }
+
+ public UserPasswordNotMatchException(String message, Throwable e)
+ {
+ super(message, e);
+ this.message = message;
+ }
+
+ @Override
+ public String getMessage()
+ {
+ return message;
+ }
+
+ public Integer getCode()
+ {
+ return code;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/AsyncManager.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/AsyncManager.java
new file mode 100644
index 0000000..e5a69b5
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/AsyncManager.java
@@ -0,0 +1,63 @@
+package com.shxy.xymanager_common.manager;
+
+
+
+
+import com.shxy.xymanager_common.util.Threads;
+import com.shxy.xymanager_common.util.spring.SpringUtils;
+
+import java.util.TimerTask;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.TimeUnit;
+
+
+/**
+ * @ClassName:AsyncManager
+ * @Description: 异步任务管理器
+ * @Author: Arno_Fu
+ * @CreatTime:12/23/2019 - 10:05 AM
+ * @Version V1.0
+ */
+
+public class AsyncManager
+{
+ /**
+ * 操作延迟10毫秒
+ */
+ private final int OPERATE_DELAY_TIME = 10;
+
+ /**
+ * 异步操作任务调度线程池
+ */
+ private ScheduledExecutorService executor = SpringUtils.getBean("scheduledExecutorService");
+
+ /**
+ * 单例模式
+ */
+ private AsyncManager(){}
+
+ private static AsyncManager me = new AsyncManager();
+
+ public static AsyncManager me()
+ {
+ return me;
+ }
+
+ /**
+ * 执行任务
+ *
+ * @param task 任务
+ */
+ public void execute(TimerTask task)
+ {
+ executor.schedule(task, OPERATE_DELAY_TIME, TimeUnit.MILLISECONDS);
+ }
+
+ /**
+ * 停止任务线程池
+ */
+ public void shutdown()
+ {
+ Threads.shutdownAndAwaitTermination(executor);
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/factory/AsyncFactory.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/factory/AsyncFactory.java
new file mode 100644
index 0000000..3429451
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/manager/factory/AsyncFactory.java
@@ -0,0 +1,76 @@
+package com.shxy.xymanager_common.manager.factory;
+
+import com.shxy.xymanager_common.constant.Constants;
+import com.shxy.xymanager_common.model.SysLoginLog;
+import com.shxy.xymanager_common.util.LogUtils;
+import com.shxy.xymanager_common.util.ServletUtils;
+import com.shxy.xymanager_common.util.ip.AddressUtils;
+import com.shxy.xymanager_common.util.ip.IpUtils;
+import eu.bitwalker.useragentutils.UserAgent;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.TimerTask;
+
+
+/**
+ * @ClassName:AsyncFactory
+ * @Description: 异步工厂(产生任务用)
+ * @Author: Arno_Fu
+ * @CreatTime:12/20/2019 - 5:03 PM
+ * @Version V1.0
+ */
+
+public class AsyncFactory {
+ private static final Logger sys_user_logger = LoggerFactory.getLogger( "sys-user" );
+
+ /**
+ * 记录登陆信息
+ *
+ * @param username 用户名
+ * @param status 状态
+ * @param message 消息
+ * @param args 列表
+ * @return 任务task
+ */
+ public static TimerTask recordLoginLog(final String username, final String status, final String message,
+ final Object... args) {
+ final UserAgent userAgent = UserAgent.parseUserAgentString( ServletUtils.getRequest().getHeader( "User-Agent" ) );
+ final String ip = IpUtils.getIpAddr( ServletUtils.getRequest() );
+ return new TimerTask() {
+ @Override
+ public void run() {
+ String address = AddressUtils.getRealAddressByIP( ip );
+ StringBuilder s = new StringBuilder();
+ s.append( LogUtils.getBlock( ip ) );
+ s.append( address );
+ s.append( LogUtils.getBlock( username ) );
+ s.append( LogUtils.getBlock( status ) );
+ s.append( LogUtils.getBlock( message ) );
+ // 打印信息到日志
+ sys_user_logger.info( s.toString(), args );
+ // 获取客户端操作系统
+ String os = userAgent.getOperatingSystem().getName();
+ // 获取客户端浏览器
+ String browser = userAgent.getBrowser().getName();
+ // 封装对象
+ SysLoginLog logininfor = new SysLoginLog();
+ logininfor.setUserName( username );
+ logininfor.setIpaddr( ip );
+ logininfor.setLoginLocation( address );
+ logininfor.setBrowser( browser );
+ logininfor.setOs( os );
+ logininfor.setMsg( message );
+ // 日志状态
+ if (Constants.LOGIN_SUCCESS.equals( status ) || Constants.LOGOUT.equals( status )) {
+ logininfor.setStatus( Constants.SUCCESS );
+ } else if (Constants.LOGIN_FAIL.equals( status )) {
+ logininfor.setStatus( Constants.FAIL );
+ }
+ // 插入数据
+// SpringUtils.getBean( SysLoginLogService.class ).insertLoginLog( logininfor );
+ }
+ };
+ }
+
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/SysLoginLog.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/SysLoginLog.java
new file mode 100644
index 0000000..132c6fc
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/SysLoginLog.java
@@ -0,0 +1,134 @@
+package com.shxy.xymanager_common.model;
+
+import java.util.Date;
+
+
+/**
+ * @ClassName:SysLoginLog
+ * @Description: 字系统访问记录表
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 8:51 PM
+ * @Version V1.0
+ */
+
+
+public class SysLoginLog{
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * ID
+ */
+ private Long loginId;
+
+ /**
+ * 用户账号
+ */
+ private String userName;
+
+ /**
+ * 登录状态 0成功 1失败
+ */
+ private String status;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 提示消息
+ */
+ private String msg;
+
+ /**
+ * 访问时间
+ */
+ private Date loginTime;
+
+ public Long getLoginId() {
+ return loginId;
+ }
+
+ public void setLoginId(Long loginId) {
+ this.loginId = loginId;
+ }
+
+ public String getUserName() {
+ return userName;
+ }
+
+ public void setUserName(String userName) {
+ this.userName = userName;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+
+ public String getIpaddr() {
+ return ipaddr;
+ }
+
+ public void setIpaddr(String ipaddr) {
+ this.ipaddr = ipaddr;
+ }
+
+ public String getLoginLocation() {
+ return loginLocation;
+ }
+
+ public void setLoginLocation(String loginLocation) {
+ this.loginLocation = loginLocation;
+ }
+
+ public String getBrowser() {
+ return browser;
+ }
+
+ public void setBrowser(String browser) {
+ this.browser = browser;
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public void setOs(String os) {
+ this.os = os;
+ }
+
+ public String getMsg() {
+ return msg;
+ }
+
+ public void setMsg(String msg) {
+ this.msg = msg;
+ }
+
+ public Date getLoginTime() {
+ return loginTime;
+ }
+
+ public void setLoginTime(Date loginTime) {
+ this.loginTime = loginTime;
+ }
+}
\ No newline at end of file
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/security/LoginUser.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/security/LoginUser.java
new file mode 100644
index 0000000..e4f4172
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/security/LoginUser.java
@@ -0,0 +1,214 @@
+package com.shxy.xymanager_common.security;
+
+
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.shxy.xymanager_common.bean.SysUser;
+import org.springframework.security.core.GrantedAuthority;
+import org.springframework.security.core.userdetails.UserDetails;
+
+import java.math.BigInteger;
+import java.util.Collection;
+import java.util.Set;
+
+/**
+ * @ClassName:LoginUser
+ * @Description: 登录用户身份权限
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 6:47 PM
+ * @Version V1.0
+ */
+
+public class LoginUser implements UserDetails {
+
+ private static final long serialVersionUID = 1L;
+
+
+ /**
+ * 用户信息
+ */
+ private SysUser user;
+
+ /**
+ * 用户唯一标识
+ */
+ private String token;
+
+ /**
+ * 登陆时间
+ */
+ private Long loginTime;
+
+ /**
+ * 过期时间
+ */
+ private BigInteger expireTime;
+
+ /**
+ * 登录IP地址
+ */
+ private String ipaddr;
+
+ private String sessionId;
+
+ /**
+ * 登录地点
+ */
+ private String loginLocation;
+
+ /**
+ * 浏览器类型
+ */
+ private String browser;
+
+ /**
+ * 操作系统
+ */
+ private String os;
+
+ /**
+ * 操作系统
+ */
+ private String dept;
+
+
+ public LoginUser()
+ {
+ }
+
+ public LoginUser(SysUser user)
+ {
+ this.user = user;
+ }
+
+ @JsonIgnore
+ @Override
+ public String getPassword()
+ {
+ return user.getPassword();
+ }
+
+ @Override
+ public String getUsername()
+ {
+ return user.getUserName();
+ }
+
+ public String getDept() {
+ return dept;
+ }
+
+ public void setDept(String dept) {
+ this.dept = dept;
+ }
+
+ public SysUser getUser() {
+ return user;
+ }
+
+ public void setUser(SysUser user) {
+ this.user = user;
+ }
+
+ public String getToken() {
+ return token;
+ }
+
+ public void setToken(String token) {
+ this.token = token;
+ }
+
+ public Long getLoginTime() {
+ return loginTime;
+ }
+
+ public void setLoginTime(Long loginTime) {
+ this.loginTime = loginTime;
+ }
+
+ public BigInteger getExpireTime() {
+ return expireTime;
+ }
+
+ public void setExpireTime(BigInteger expireTime) {
+ this.expireTime = expireTime;
+ }
+
+ public String getIpaddr() {
+ return ipaddr;
+ }
+
+ public void setIpaddr(String ipaddr) {
+ this.ipaddr = ipaddr;
+ }
+
+ public String getLoginLocation() {
+ return loginLocation;
+ }
+
+ public void setLoginLocation(String loginLocation) {
+ this.loginLocation = loginLocation;
+ }
+
+ public String getBrowser() {
+ return browser;
+ }
+
+ public void setBrowser(String browser) {
+ this.browser = browser;
+ }
+
+ public String getOs() {
+ return os;
+ }
+
+ public void setOs(String os) {
+ this.os = os;
+ }
+
+ @Override
+ public Collection extends GrantedAuthority> getAuthorities() {
+ return null;
+ }
+
+
+ /**
+ * 账户是否过期
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isAccountNonExpired() {
+ return true;
+ }
+
+ /**
+ * 是否禁用
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isAccountNonLocked() {
+ return true;
+ }
+
+ /**
+ * 密码是否过期
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isCredentialsNonExpired() {
+ return true;
+ }
+
+ /**
+ * 是否启用
+ * @return
+ */
+ @JsonIgnore
+ @Override
+ public boolean isEnabled() {
+ return true;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/security/componet/CustomAuthExceptionEntryPoint.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/security/componet/CustomAuthExceptionEntryPoint.java
new file mode 100644
index 0000000..a5080b2
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/security/componet/CustomAuthExceptionEntryPoint.java
@@ -0,0 +1,44 @@
+package com.shxy.xymanager_common.security.componet;
+
+
+import com.alibaba.fastjson.JSON;
+import com.shxy.xymanager_common.base.AjaxResult;
+import com.shxy.xymanager_common.constant.HttpStatusCode;
+import com.shxy.xymanager_common.util.StringUtils;
+import org.springframework.http.HttpStatus;
+import org.springframework.security.core.AuthenticationException;
+import org.springframework.security.web.AuthenticationEntryPoint;
+import org.springframework.stereotype.Component;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+
+/**
+ * @ClassName:CustomAuthExceptionEntryPoint
+ * @Description: 无效token异常类重写.
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 6:20 PM
+ * @Version V1.0
+ */
+
+@Component
+public class CustomAuthExceptionEntryPoint implements AuthenticationEntryPoint
+{
+
+ @Override
+ public void commence(HttpServletRequest request, HttpServletResponse response,
+ AuthenticationException authException) throws ServletException {
+ response.setStatus( HttpStatus.OK.value());
+ response.setHeader("Content-Type", "application/json;charset=UTF-8");
+ try {
+ String result = StringUtils.format("请求访问:{},认证失败,无法访问系统资源", request.getRequestURI());
+ String msg = JSON.toJSONString( AjaxResult.error( HttpStatusCode.UNAUTHORIZED , result ) );
+ response.getWriter().write( msg );
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/LogUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/LogUtils.java
new file mode 100644
index 0000000..1039613
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/LogUtils.java
@@ -0,0 +1,22 @@
+package com.shxy.xymanager_common.util;
+
+
+/**
+ * @ClassName:LogUtils
+ * @Description: 处理并记录日志文件
+ * @Author: Arno_Fu
+ * @CreatTime:12/20/2019 - 5:06 PM
+ * @Version V1.0
+ */
+
+public class LogUtils
+{
+ public static String getBlock(Object msg)
+ {
+ if (msg == null)
+ {
+ msg = "";
+ }
+ return "[" + msg.toString() + "]";
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Md5.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Md5.java
new file mode 100644
index 0000000..e55e961
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Md5.java
@@ -0,0 +1,63 @@
+package com.shxy.xymanager_common.util;
+
+import org.springframework.util.DigestUtils;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+/**
+ * @author Bobi_huo
+ * @date 2020-10-10 15:26
+ */
+public class Md5 {
+
+ private static final String[] STR_DIGITS = new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"};
+
+ public Md5() {
+ }
+
+ private static String byteToArrayString(byte bByte) {
+ int iRet = bByte;
+ if (bByte < 0) {
+ iRet = bByte + 256;
+ }
+
+ int iD1 = iRet / 16;
+ int iD2 = iRet % 16;
+ return STR_DIGITS[iD1] + STR_DIGITS[iD2];
+ }
+
+ private static String byteToString(byte[] bByte) {
+ StringBuffer sBuffer = new StringBuffer();
+
+ for(int i = 0; i < bByte.length; ++i) {
+ sBuffer.append(byteToArrayString(bByte[i]));
+ }
+
+ return sBuffer.toString().toUpperCase();
+ }
+
+ public static String getMD5Code(String strObj) {
+ String resultString = null;
+
+ try {
+ new String(strObj);
+ MessageDigest md = MessageDigest.getInstance("MD5");
+ resultString = byteToString(md.digest(strObj.getBytes()));
+ } catch (NoSuchAlgorithmException var3) {
+ var3.printStackTrace();
+ }
+
+ return resultString;
+ }
+
+
+
+
+ public static void main(String[] args) {
+// System.out.println(getMD5Code("15500000000123456"));
+
+ System.out.println(DigestUtils.md5DigestAsHex("123456".getBytes()));
+ }
+
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/RsaUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/RsaUtils.java
new file mode 100644
index 0000000..2a13945
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/RsaUtils.java
@@ -0,0 +1,186 @@
+package com.shxy.xymanager_common.util;
+
+
+
+import org.apache.commons.codec.binary.Base64;
+
+import javax.crypto.Cipher;
+import java.security.*;
+import java.security.interfaces.RSAPrivateKey;
+import java.security.interfaces.RSAPublicKey;
+import java.security.spec.PKCS8EncodedKeySpec;
+import java.security.spec.X509EncodedKeySpec;
+
+
+/**
+ * @ClassName:RsaUtils
+ * @Description: Rsa 工具类,公钥私钥生成,加解密
+ * @Author: Arno_Fu
+ * @CreatTime:12/29/2020 - 11:36 AM
+ * @Version V1.0
+ */
+public class RsaUtils {
+
+ private static final String SRC = "123456";
+
+ public static void main(String[] args) throws Exception {
+ System.out.println("\n");
+ RsaKeyPair keyPair = generateKeyPair();
+ System.out.println("公钥:" + keyPair.getPublicKey());
+ System.out.println("私钥:" + keyPair.getPrivateKey());
+ System.out.println("\n");
+ test1(keyPair);
+ System.out.println("\n");
+ test2(keyPair);
+ System.out.println("\n");
+ }
+
+ /**
+ * 公钥加密私钥解密
+ */
+ private static void test1(RsaKeyPair keyPair) throws Exception {
+ System.out.println("***************** 公钥加密私钥解密开始 *****************");
+ String text1 = encryptByPublicKey(keyPair.getPublicKey(), RsaUtils.SRC);
+ String text2 = decryptByPrivateKey(keyPair.getPrivateKey(), text1);
+ System.out.println("加密前:" + RsaUtils.SRC);
+ System.out.println("加密后:" + text1);
+ System.out.println("解密后:" + text2);
+ if (RsaUtils.SRC.equals(text2)) {
+ System.out.println("解密字符串和原始字符串一致,解密成功");
+ } else {
+ System.out.println("解密字符串和原始字符串不一致,解密失败");
+ }
+ System.out.println("***************** 公钥加密私钥解密结束 *****************");
+ }
+
+ /**
+ * 私钥加密公钥解密
+ * @throws Exception /
+ */
+ private static void test2(RsaKeyPair keyPair) throws Exception {
+ System.out.println("***************** 私钥加密公钥解密开始 *****************");
+ String text1 = encryptByPrivateKey(keyPair.getPrivateKey(), RsaUtils.SRC);
+ String text2 = decryptByPublicKey(keyPair.getPublicKey(), text1);
+ System.out.println("加密前:" + RsaUtils.SRC);
+ System.out.println("加密后:" + text1);
+ System.out.println("解密后:" + text2);
+ if (RsaUtils.SRC.equals(text2)) {
+ System.out.println("解密字符串和原始字符串一致,解密成功");
+ } else {
+ System.out.println("解密字符串和原始字符串不一致,解密失败");
+ }
+ System.out.println("***************** 私钥加密公钥解密结束 *****************");
+ }
+
+ /**
+ * 公钥解密
+ *
+ * @param publicKeyText 公钥
+ * @param text 待解密的信息
+ * @return /
+ * @throws Exception /
+ */
+ public static String decryptByPublicKey(String publicKeyText, String text) throws Exception {
+ X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText));
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);
+ Cipher cipher = Cipher.getInstance("RSA");
+ cipher.init(Cipher.DECRYPT_MODE, publicKey);
+ byte[] result = cipher.doFinal(Base64.decodeBase64(text));
+ return new String(result);
+ }
+
+ /**
+ * 私钥加密
+ *
+ * @param privateKeyText 私钥
+ * @param text 待加密的信息
+ * @return /
+ * @throws Exception /
+ */
+ public static String encryptByPrivateKey(String privateKeyText, String text) throws Exception {
+ PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText));
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);
+ Cipher cipher = Cipher.getInstance("RSA");
+ cipher.init(Cipher.ENCRYPT_MODE, privateKey);
+ byte[] result = cipher.doFinal(text.getBytes());
+ return Base64.encodeBase64String(result);
+ }
+
+ /**
+ * 私钥解密
+ *
+ * @param privateKeyText 私钥
+ * @param text 待解密的文本
+ * @return /
+ * @throws Exception /
+ */
+ public static String decryptByPrivateKey(String privateKeyText, String text) throws Exception {
+ PKCS8EncodedKeySpec pkcs8EncodedKeySpec5 = new PKCS8EncodedKeySpec(Base64.decodeBase64(privateKeyText));
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ PrivateKey privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec5);
+ Cipher cipher = Cipher.getInstance("RSA");
+ cipher.init(Cipher.DECRYPT_MODE, privateKey);
+ byte[] result = cipher.doFinal(Base64.decodeBase64(text));
+ return new String(result);
+ }
+
+ /**
+ * 公钥加密
+ *
+ * @param publicKeyText 公钥
+ * @param text 待加密的文本
+ * @return /
+ */
+ public static String encryptByPublicKey(String publicKeyText, String text) throws Exception {
+ X509EncodedKeySpec x509EncodedKeySpec2 = new X509EncodedKeySpec(Base64.decodeBase64(publicKeyText));
+ KeyFactory keyFactory = KeyFactory.getInstance("RSA");
+ PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec2);
+ Cipher cipher = Cipher.getInstance("RSA");
+ cipher.init(Cipher.ENCRYPT_MODE, publicKey);
+ byte[] result = cipher.doFinal(text.getBytes());
+ return Base64.encodeBase64String(result);
+ }
+
+ /**
+ * 构建RSA密钥对
+ *
+ * @return /
+ * @throws NoSuchAlgorithmException /
+ */
+ public static RsaKeyPair generateKeyPair() throws NoSuchAlgorithmException {
+ KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
+ keyPairGenerator.initialize(1024);
+ KeyPair keyPair = keyPairGenerator.generateKeyPair();
+ RSAPublicKey rsaPublicKey = (RSAPublicKey) keyPair.getPublic();
+ RSAPrivateKey rsaPrivateKey = (RSAPrivateKey) keyPair.getPrivate();
+ String publicKeyString = Base64.encodeBase64String(rsaPublicKey.getEncoded());
+ String privateKeyString = Base64.encodeBase64String(rsaPrivateKey.getEncoded());
+ return new RsaKeyPair(publicKeyString, privateKeyString);
+ }
+
+
+ /**
+ * RSA密钥对对象
+ */
+ public static class RsaKeyPair {
+
+ private final String publicKey;
+ private final String privateKey;
+
+ public RsaKeyPair(String publicKey, String privateKey) {
+ this.publicKey = publicKey;
+ this.privateKey = privateKey;
+ }
+
+ public String getPublicKey() {
+ return publicKey;
+ }
+
+ public String getPrivateKey() {
+ return privateKey;
+ }
+
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SecurityUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SecurityUtils.java
new file mode 100644
index 0000000..8812c28
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/SecurityUtils.java
@@ -0,0 +1,92 @@
+package com.shxy.xymanager_common.util;
+
+
+import com.shxy.xymanager_common.security.LoginUser;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.core.context.SecurityContextHolder;
+import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
+
+/**
+ * @ClassName:SecurityUtils
+ * @Description: 安全服务工具类
+ * @Author: Arno_Fu
+ * @CreatTime:12/19/2019 - 4:46 PM
+ * @Version V1.0
+ */
+
+public class SecurityUtils
+{
+ /**
+ * 获取用户账户
+ **/
+ public static String getUsername()
+ {
+ try
+ {
+ /* return getLoginUser().getUsername();*/
+ }
+ catch (Exception e)
+ {
+ /* throw new CustomException("获取用户账户异常", HttpStatusCode.UNAUTHORIZED);*/
+ }
+ return "!";
+ }
+
+ /**
+ * 获取用户
+ **/
+ public static LoginUser getLoginUser() throws Exception {
+ try
+ {
+ return (LoginUser) getAuthentication().getPrincipal();
+ }
+ catch (Exception e)
+ {
+ throw new Exception("获取用户信息异常:",e.getCause());
+ }
+ }
+
+ /**
+ * 获取Authentication
+ */
+ public static Authentication getAuthentication()
+ {
+ return SecurityContextHolder.getContext().getAuthentication();
+ }
+
+ /**
+ * 生成BCryptPasswordEncoder密码
+ *
+ * @param password 密码
+ * @return 加密字符串
+ */
+ public static String encryptPassword(String password)
+ {
+ BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+ return passwordEncoder.encode(password);
+ }
+
+ /**
+ * 判断密码是否相同
+ *
+ * @param rawPassword 真实密码
+ * @param encodedPassword 加密后字符
+ * @return 结果
+ */
+ public static boolean matchesPassword(String rawPassword, String encodedPassword)
+ {
+ BCryptPasswordEncoder passwordEncoder = new BCryptPasswordEncoder();
+ return passwordEncoder.matches(rawPassword, encodedPassword);
+ }
+
+ /**
+ * 是否为管理员
+ *
+ * @param userId 用户ID
+ * @return 结果
+ */
+ public static boolean isAdmin(Long userId)
+ {
+ return userId != null && 1L == userId;
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Threads.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Threads.java
new file mode 100644
index 0000000..21089b0
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/Threads.java
@@ -0,0 +1,96 @@
+package com.shxy.xymanager_common.util;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import java.util.concurrent.*;
+
+/**
+ * 线程相关工具类.
+ *
+ * @author ruoyi
+ */
+public class Threads
+{
+ private static final Logger logger = LoggerFactory.getLogger(Threads.class);
+
+ /**
+ * sleep等待,单位为毫秒
+ */
+ public static void sleep(long milliseconds)
+ {
+ try
+ {
+ Thread.sleep(milliseconds);
+ }
+ catch (InterruptedException e)
+ {
+ return;
+ }
+ }
+
+ /**
+ * 停止线程池
+ * 先使用shutdown, 停止接收新任务并尝试完成所有已存在任务.
+ * 如果超时, 则调用shutdownNow, 取消在workQueue中Pending的任务,并中断所有阻塞函数.
+ * 如果仍人超時,則強制退出.
+ * 另对在shutdown时线程本身被调用中断做了处理.
+ */
+ public static void shutdownAndAwaitTermination(ExecutorService pool)
+ {
+ if (pool != null && !pool.isShutdown())
+ {
+ pool.shutdown();
+ try
+ {
+ if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+ {
+ pool.shutdownNow();
+ if (!pool.awaitTermination(120, TimeUnit.SECONDS))
+ {
+ logger.info("Pool did not terminate");
+ }
+ }
+ }
+ catch (InterruptedException ie)
+ {
+ pool.shutdownNow();
+ Thread.currentThread().interrupt();
+ }
+ }
+ }
+
+ /**
+ * 打印线程异常信息
+ */
+ public static void printException(Runnable r, Throwable t)
+ {
+ if (t == null && r instanceof Future>)
+ {
+ try
+ {
+ Future> future = (Future>) r;
+ if (future.isDone())
+ {
+ future.get();
+ }
+ }
+ catch (CancellationException ce)
+ {
+ t = ce;
+ }
+ catch (ExecutionException ee)
+ {
+ t = ee.getCause();
+ }
+ catch (InterruptedException ie)
+ {
+ Thread.currentThread().interrupt();
+ }
+ }
+ if (t != null)
+ {
+ logger.error(t.getMessage(), t);
+ }
+ }
+}
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/http/HttpUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/http/HttpUtils.java
new file mode 100644
index 0000000..ecc37ef
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/http/HttpUtils.java
@@ -0,0 +1,190 @@
+package com.shxy.xymanager_common.util.http;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.net.ssl.*;
+import java.io.*;
+import java.net.ConnectException;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLConnection;
+import java.security.cert.X509Certificate;
+
+
+/**
+ * @ClassName:HttpUtils
+ * @Description: 通用http发送方法
+ * @Author: Arno_Fu
+ * @CreatTime:12/20/2019 - 5:05 PM
+ * @Version V1.0
+ */
+
+public class HttpUtils {
+ private static final Logger log = LoggerFactory.getLogger( HttpUtils.class );
+
+ /**
+ * 向指定 URL 发送GET方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendGet(String url, String param) {
+ StringBuilder result = new StringBuilder();
+ BufferedReader in = null;
+ try {
+ String urlNameString = url + "?" + param;
+ log.info( "sendGet - {}", urlNameString );
+ URL realUrl = new URL( urlNameString );
+ URLConnection connection = realUrl.openConnection();
+ connection.setRequestProperty( "accept", "*/*" );
+ connection.setRequestProperty( "connection", "Keep-Alive" );
+ connection.setRequestProperty( "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" );
+ connection.connect();
+ in = new BufferedReader( new InputStreamReader( connection.getInputStream() ) );
+ String line;
+ while ((line = in.readLine()) != null) {
+ result.append( line );
+ }
+ log.info( "recv - {}", result );
+ } catch (ConnectException e) {
+ log.error( "调用HttpUtils.sendGet ConnectException, url=" + url + ",param=" + param, e );
+ } catch (SocketTimeoutException e) {
+ log.error( "调用HttpUtils.sendGet SocketTimeoutException, url=" + url + ",param=" + param, e );
+ } catch (IOException e) {
+ log.error( "调用HttpUtils.sendGet IOException, url=" + url + ",param=" + param, e );
+ } catch (Exception e) {
+ log.error( "调用HttpsUtil.sendGet Exception, url=" + url + ",param=" + param, e );
+ } finally {
+ try {
+ if (in != null) {
+ in.close();
+ }
+ } catch (Exception ex) {
+ log.error( "调用in.close Exception, url=" + url + ",param=" + param, ex );
+ }
+ }
+ return result.toString();
+ }
+
+ /**
+ * 向指定 URL 发送POST方法的请求
+ *
+ * @param url 发送请求的 URL
+ * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
+ * @return 所代表远程资源的响应结果
+ */
+ public static String sendPost(String url, String param) {
+ PrintWriter out = null;
+ BufferedReader in = null;
+ StringBuilder result = new StringBuilder();
+ try {
+ String urlNameString = url + "?" + param;
+ log.info( "sendPost - {}", urlNameString );
+ URL realUrl = new URL( urlNameString );
+ URLConnection conn = realUrl.openConnection();
+ conn.setRequestProperty( "accept", "*/*" );
+ conn.setRequestProperty( "connection", "Keep-Alive" );
+ conn.setRequestProperty( "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" );
+ conn.setRequestProperty( "Accept-Charset", "utf-8" );
+ conn.setRequestProperty( "contentType", "utf-8" );
+ conn.setDoOutput( true );
+ conn.setDoInput( true );
+ out = new PrintWriter( conn.getOutputStream() );
+ out.print( param );
+ out.flush();
+ in = new BufferedReader( new InputStreamReader( conn.getInputStream(), "utf-8" ) );
+ String line;
+ while ((line = in.readLine()) != null) {
+ result.append( line );
+ }
+ log.info( "recv - {}", result );
+ } catch (ConnectException e) {
+ log.error( "调用HttpUtils.sendPost ConnectException, url=" + url + ",param=" + param, e );
+ } catch (SocketTimeoutException e) {
+ log.error( "调用HttpUtils.sendPost SocketTimeoutException, url=" + url + ",param=" + param, e );
+ } catch (IOException e) {
+ log.error( "调用HttpUtils.sendPost IOException, url=" + url + ",param=" + param, e );
+ } catch (Exception e) {
+ log.error( "调用HttpsUtil.sendPost Exception, url=" + url + ",param=" + param, e );
+ } finally {
+ try {
+ if (out != null) {
+ out.close();
+ }
+ if (in != null) {
+ in.close();
+ }
+ } catch (IOException ex) {
+ log.error( "调用in.close Exception, url=" + url + ",param=" + param, ex );
+ }
+ }
+ return result.toString();
+ }
+
+ public static String sendSSLPost(String url, String param) {
+ StringBuilder result = new StringBuilder();
+ String urlNameString = url + "?" + param;
+ try {
+ log.info( "sendSSLPost - {}", urlNameString );
+ SSLContext sc = SSLContext.getInstance( "SSL" );
+ sc.init( null, new TrustManager[]{new TrustAnyTrustManager()}, new java.security.SecureRandom() );
+ URL console = new URL( urlNameString );
+ HttpsURLConnection conn = (HttpsURLConnection) console.openConnection();
+ conn.setRequestProperty( "accept", "*/*" );
+ conn.setRequestProperty( "connection", "Keep-Alive" );
+ conn.setRequestProperty( "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)" );
+ conn.setRequestProperty( "Accept-Charset", "utf-8" );
+ conn.setRequestProperty( "contentType", "utf-8" );
+ conn.setDoOutput( true );
+ conn.setDoInput( true );
+
+ conn.setSSLSocketFactory( sc.getSocketFactory() );
+ conn.setHostnameVerifier( new TrustAnyHostnameVerifier() );
+ conn.connect();
+ InputStream is = conn.getInputStream();
+ BufferedReader br = new BufferedReader( new InputStreamReader( is ) );
+ String ret = "";
+ while ((ret = br.readLine()) != null) {
+ if (ret != null && !ret.trim().equals( "" )) {
+ result.append( new String( ret.getBytes( "ISO-8859-1" ), "utf-8" ) );
+ }
+ }
+ log.info( "recv - {}", result );
+ conn.disconnect();
+ br.close();
+ } catch (ConnectException e) {
+ log.error( "调用HttpUtils.sendSSLPost ConnectException, url=" + url + ",param=" + param, e );
+ } catch (SocketTimeoutException e) {
+ log.error( "调用HttpUtils.sendSSLPost SocketTimeoutException, url=" + url + ",param=" + param, e );
+ } catch (IOException e) {
+ log.error( "调用HttpUtils.sendSSLPost IOException, url=" + url + ",param=" + param, e );
+ } catch (Exception e) {
+ log.error( "调用HttpsUtil.sendSSLPost Exception, url=" + url + ",param=" + param, e );
+ }
+ return result.toString();
+ }
+
+ private static class TrustAnyTrustManager implements X509TrustManager {
+ @Override
+ public void checkClientTrusted(X509Certificate[] chain, String authType) {
+ }
+
+ @Override
+ public void checkServerTrusted(X509Certificate[] chain, String authType) {
+ }
+
+ @Override
+ public X509Certificate[] getAcceptedIssuers() {
+ return new X509Certificate[]{};
+ }
+ }
+
+ private static class TrustAnyHostnameVerifier implements HostnameVerifier {
+ @Override
+ public boolean verify(String hostname, SSLSession session) {
+ return true;
+ }
+ }
+}
\ No newline at end of file
diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/SysUserVo.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/SysUserVo.java
new file mode 100644
index 0000000..c9cceef
--- /dev/null
+++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/SysUserVo.java
@@ -0,0 +1,26 @@
+package com.shxy.xymanager_common.vo;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import javax.validation.constraints.NotNull;
+
+@Data
+@ApiModel(value = "用户对象", description = "用户对象描述")
+public class SysUserVo {
+
+ @NotNull(message = "用户名")
+ @ApiModelProperty(value = "用户名", example = "123455")
+ private String userName;
+
+ @NotNull(message = "昵称")
+ @ApiModelProperty(value = "昵称", example = "123455")
+ private String nickName;
+
+ @NotNull(message = "密码")
+ @ApiModelProperty(value = "密码", example = "123455")
+ private String password;
+
+
+}
diff --git a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/SysUserMapperDao.java b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/SysUserMapperDao.java
new file mode 100644
index 0000000..4459a7a
--- /dev/null
+++ b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/SysUserMapperDao.java
@@ -0,0 +1,94 @@
+package com.shxy.xymanager_dao.dao;
+
+import com.shxy.xymanager_common.bean.SysUser;
+import com.shxy.xymanager_common.entity.UserSession;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+/**
+ * @ClassName:SysUserMapper
+ * @Description: 用户表 Mapper 接口.
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 2:51 PM
+ * @Version V1.0
+ */
+
+@Mapper
+public interface SysUserMapperDao {
+
+ /**
+ *
+ * @Description 通过用户账户获取用户信息
+ * @param userAccount
+ * @return com.chenxuan.entity.model.SysUser
+ */
+ SysUser selectByUserAccount(@Param("userName") String userAccount);
+
+
+ /**
+ * 校验用户名称是否唯一
+ *
+ * @param userName 用户名称
+ * @return 结果
+ */
+ int checkUserNameUnique(@Param("userName") String userName);
+
+
+ int addUser(SysUser user);
+
+ Boolean updateById(SysUser user);
+
+
+
+
+ /**
+ * 通过用户名查询用户
+ *
+ * @param userName 用户名
+ * @return 用户对象信息
+ */
+ public SysUser selectUserByUserName(String userName);
+
+ /**
+ * 通过用户ID查询用户
+ *
+ * @param userId 用户ID
+ * @return 用户对象信息
+ */
+ public SysUser selectUserById(Long userId);
+
+
+ /**
+ * 修改用户头像
+ *
+ * @param userName 用户名
+ * @param avatar 头像地址
+ * @return 结果
+ */
+ int updateUserAvatar(@Param("userName") String userName, @Param("avatar") String avatar);
+
+ /**
+ * 重置用户密码
+ *
+ * @param userName 用户名
+ * @param password 密码
+ * @return 结果
+ */
+ int resetUserPwd(@Param("userName") String userName, @Param("password") String password);
+
+
+ /**
+ * 批量删除用户信息
+ *
+ * @param userIds 需要删除的用户ID
+ * @return 结果
+ */
+ public int deleteUserByIds(Long[] userIds);
+
+
+ UserSession selectUserBySessionId(String sessionId);
+
+ void insertUserSession(UserSession session);
+
+ int updateUserSession(UserSession session);
+}
diff --git a/xymanager_dao/src/main/resources/mappers/SysUserMapperDao.xml b/xymanager_dao/src/main/resources/mappers/SysUserMapperDao.xml
new file mode 100644
index 0000000..9d1832c
--- /dev/null
+++ b/xymanager_dao/src/main/resources/mappers/SysUserMapperDao.xml
@@ -0,0 +1,85 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ SELECT
+ user_id,
+ user_name,
+ `status`
+ FROM
+ sys_user u
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ update sys_user set password = #{password} where user_name = #{userName}
+
+
+
+ insert into sys_user(user_name,nick_name,password)
+ values(#{userName},#{nickName},#{password})
+
+
+
+
+
+ update `sys_user_session`
+
+
+ expireTime = #{expireTime},
+
+
+ where session_id = #{sessionId}
+
+
+
+
+ insert into sys_user_session (session_id, user_name,role,expire_time)
+ values (#{sessionId,jdbcType=VARCHAR}, #{userName,jdbcType=VARCHAR}, #{ROLE,jdbcType=VARCHAR}, #{expireTime,jdbcType=INTEGER})
+
+
+
\ No newline at end of file
diff --git a/xymanager_service/pom.xml b/xymanager_service/pom.xml
index 64e28a6..38e1265 100644
--- a/xymanager_service/pom.xml
+++ b/xymanager_service/pom.xml
@@ -26,6 +26,11 @@
com.shxy
xymanager_dao
+
+ io.jsonwebtoken
+ jjwt
+ 0.9.0
+
diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomPermissionServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomPermissionServiceImpl.java
new file mode 100644
index 0000000..1dadcdb
--- /dev/null
+++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomPermissionServiceImpl.java
@@ -0,0 +1,44 @@
+package com.shxy.xymanager_service.impl;
+
+import com.shxy.xymanager_common.bean.SysUser;
+import org.springframework.stereotype.Component;
+
+import java.util.Set;
+
+
+/**
+ * @ClassName:CustomPermissionService
+ * @Description: 用户权限处理.
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 8:30 PM
+ * @Version V1.0
+ */
+
+@Component
+public class CustomPermissionServiceImpl {
+
+
+ /**
+ * 获取角色数据权限
+ *
+ * @param user 用户信息
+ * @return 角色权限信息
+ */
+ public Set getRolePermission(SysUser user)
+ {
+
+ return null;
+ }
+
+ /**
+ * 获取菜单数据权限
+ *
+ * @param user 用户信息
+ * @return 菜单权限信息
+ */
+ public Set getMenuPermission(SysUser user)
+ {
+
+ return null;
+ }
+}
diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomUserDetailsServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomUserDetailsServiceImpl.java
new file mode 100644
index 0000000..8b85779
--- /dev/null
+++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/CustomUserDetailsServiceImpl.java
@@ -0,0 +1,51 @@
+package com.shxy.xymanager_service.impl;
+
+
+import com.shxy.xymanager_common.bean.SysUser;
+import com.shxy.xymanager_common.constant.UserStatus;
+import com.shxy.xymanager_common.exception.base.BaseException;
+import com.shxy.xymanager_common.security.LoginUser;
+import com.shxy.xymanager_service.service.CustomPermissionService;
+import com.shxy.xymanager_service.service.SysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.security.core.userdetails.UserDetails;
+import org.springframework.security.core.userdetails.UserDetailsService;
+import org.springframework.security.core.userdetails.UsernameNotFoundException;
+import org.springframework.stereotype.Service;
+
+import java.util.Set;
+
+/**
+ * @ClassName:CustomUserDetailsService
+ * @Description: 用户验证处理.
+ * @Author: CY
+ * @CreatTime:11/26/2019 - 5:34 PM
+ * @Version V1.0
+ */
+@Slf4j
+@Service
+ public class CustomUserDetailsServiceImpl implements UserDetailsService {
+
+ @Autowired
+ private SysUserService sysUserService;
+
+
+ @Override
+ public UserDetails loadUserByUsername(String userAccount) throws UsernameNotFoundException {
+ SysUser user = sysUserService.findByUserAccount( userAccount );
+ if (null == user) {
+ log.info( "登录用户:{} 不存在.", userAccount );
+ throw new UsernameNotFoundException( "登录用户:" + userAccount + " 不存在" );
+ } else if (UserStatus.DISABLE.getCode().equals( user.getStatus() )) {
+ log.info( "登录用户:{} 已被停用.", userAccount );
+ throw new BaseException( "对不起,您的账号:" + userAccount + " 已停用" );
+ }
+ return createLoginUser( user );
+ }
+
+ public UserDetails createLoginUser(SysUser user) {
+ return new LoginUser( user);
+ }
+
+}
diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LoginServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LoginServiceImpl.java
new file mode 100644
index 0000000..776193f
--- /dev/null
+++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LoginServiceImpl.java
@@ -0,0 +1,112 @@
+package com.shxy.xymanager_service.impl;
+
+import cn.hutool.core.date.DateTime;
+import com.shxy.xymanager_common.bean.ServiceBody;
+import com.shxy.xymanager_common.bean.SysUser;
+import com.shxy.xymanager_common.config.CustomRsaProperties;
+import com.shxy.xymanager_common.constant.Constants;
+import com.shxy.xymanager_common.constant.HttpStatusCode;
+import com.shxy.xymanager_common.entity.UserSession;
+import com.shxy.xymanager_common.exception.Asserts;
+import com.shxy.xymanager_common.exception.UserPasswordNotMatchException;
+import com.shxy.xymanager_common.manager.AsyncManager;
+import com.shxy.xymanager_common.manager.factory.AsyncFactory;
+import com.shxy.xymanager_common.security.LoginUser;
+import com.shxy.xymanager_common.util.MyDateUtils;
+import com.shxy.xymanager_common.util.RsaUtils;
+import com.shxy.xymanager_common.util.StringUtils;
+import com.shxy.xymanager_dao.dao.SysUserMapperDao;
+import com.shxy.xymanager_service.service.LoginService;
+import com.shxy.xymanager_service.service.SysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.util.DigestUtils;
+
+import java.math.BigInteger;
+import java.util.HashSet;
+import java.util.Set;
+
+/**
+ * 装置通道实现层
+ */
+@Service
+@Slf4j
+public class LoginServiceImpl implements LoginService {
+
+
+ @Autowired
+ private SysUserService sysUserService;
+
+ @Autowired
+ private SysUserMapperDao sysUserMapperDao;
+
+ /**
+ * @param username 用户名
+ * @param password 密码
+ * @return java.lang.String
+ * @description 登录验证
+ */
+ public ServiceBody login(String username, String password) throws Exception {
+// String verifyKey = Constants.CAPTCHA_CODE_KEY + uuid;
+// String captcha = redisCacheService.getCacheObject(verifyKey);
+//
+// redisCacheService.deleteObject(verifyKey);
+// if (captcha == null) {
+// AsyncManager.me().execute(AsyncFactory.recordLoginLog(username, Constants.LOGIN_FAIL, "验证码错误"));
+// throw new CustomException("验证码错误", HttpStatusCode.ERROR);
+// }
+//
+// if (!code.equalsIgnoreCase(captcha)) {
+// AsyncManager.me().execute(AsyncFactory.recordLoginLog(username, Constants.LOGIN_FAIL, "验证码错误"));
+// throw new CustomException("验证码错误", HttpStatusCode.ERROR);
+// }
+ // 生成token
+ return null;
+ }
+
+
+ /**
+ *
+ * @param username 账号
+ * @param password 密码
+ * @return
+ */
+ public ServiceBody remoteLogin(String username, String password) throws Exception {
+ UserSession user = getLoginUser(username, password);
+ sysUserMapperDao.insertUserSession(user);
+ // 生成token
+ return Asserts.success(user.getSessionId());
+ }
+
+ /**
+ * 用户登录校验
+ *
+ * @param username
+ * @param password
+ * @return
+ */
+ public UserSession getLoginUser(String username, String password) throws Exception {
+ // 用户验证
+ SysUser account = sysUserService.findByUserAccount(username);
+ // 判断用户是否存在
+ if (StringUtils.isNull(account)) {
+ throw new UserPasswordNotMatchException("用户不存在", HttpStatusCode.ERROR);
+ }
+// String userPassword = Md5.getMD5Code(account.getPasswordSalt() + password);
+// String userPassword = Md5.getMD5Code(password);
+ // 密码解密
+ String pwd = RsaUtils.decryptByPrivateKey( CustomRsaProperties.privateKey, account.getPassword() );
+ // 密码对比
+ if (!password.equals(pwd)) {
+ throw new UserPasswordNotMatchException("密码错误", HttpStatusCode.ERROR);
+ }
+ UserSession user = new UserSession();
+// loginUser.setPermissions(permissions);
+ user.setUserName(username);
+ user.setRole(account.getRole());
+ BigInteger date = MyDateUtils.TimeMillSecond2Second(new DateTime());
+ user.setExpireTime(date);
+ return user;
+ }
+}
diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LogoutSuccessHandlerImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LogoutSuccessHandlerImpl.java
new file mode 100644
index 0000000..4284bda
--- /dev/null
+++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/LogoutSuccessHandlerImpl.java
@@ -0,0 +1,35 @@
+package com.shxy.xymanager_service.impl;
+
+import com.shxy.xymanager_common.security.LoginUser;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.core.Authentication;
+import org.springframework.security.web.authentication.logout.LogoutSuccessHandler;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+
+/**
+ * 自定义退出处理类 返回成功
+ *
+ * @author ruoyi
+ */
+@Configuration
+public class LogoutSuccessHandlerImpl implements LogoutSuccessHandler
+{
+
+ /**
+ * 退出处理
+ *
+ * @return
+ */
+ @Override
+ public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication)
+ throws IOException, ServletException
+ {
+
+ /*ServletUtils.renderString(response, JSON.toJSONString( AjaxResult.error( HttpStatusCode.SUCCESS, "退出成功")));*/
+ }
+}
diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/SysUserServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/SysUserServiceImpl.java
new file mode 100644
index 0000000..7493e79
--- /dev/null
+++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/SysUserServiceImpl.java
@@ -0,0 +1,176 @@
+package com.shxy.xymanager_service.impl;
+
+
+
+import com.shxy.xymanager_common.bean.ServiceBody;
+import com.shxy.xymanager_common.bean.SysUser;
+import com.shxy.xymanager_common.config.CustomRsaProperties;
+import com.shxy.xymanager_common.constant.UuidUtils;
+import com.shxy.xymanager_common.entity.UserSession;
+import com.shxy.xymanager_common.exception.Asserts;
+import com.shxy.xymanager_common.util.Md5;
+import com.shxy.xymanager_common.util.RsaUtils;
+import com.shxy.xymanager_common.util.SecurityUtils;
+import com.shxy.xymanager_common.vo.SysUserVo;
+import com.shxy.xymanager_dao.dao.SysUserMapperDao;
+import com.shxy.xymanager_service.service.SysUserService;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpEntity;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Component;
+import org.springframework.stereotype.Service;
+
+import java.util.HashMap;
+import java.util.Map;
+
+
+/**
+ * @ClassName:SysUserServiceImpl
+ * @Description: * 用户信息表 服务实现类.
+ * @Author: Arno_Fu
+ * @CreatTime:11/26/2019 - 3:26 PM
+ * @Version V1.0
+ */
+@Service
+@Component
+@Slf4j
+public class SysUserServiceImpl implements SysUserService {
+
+ @Autowired
+ private SysUserMapperDao sysUserMapperDao;
+
+ @Override
+ public SysUser findByUserAccount(String userAccount) {
+ return sysUserMapperDao.selectByUserAccount(userAccount);
+ }
+
+
+
+ @Override
+ public Boolean checkUserNameUnique(String userName) {
+ return sysUserMapperDao.checkUserNameUnique(userName) > 0 ? false : true;
+ }
+
+
+
+ @Override
+ public Integer insertUser(SysUser user) {
+ int flag = sysUserMapperDao.addUser(user);
+ if(flag>0)
+ {
+ Map map = new HashMap<>();
+ map.put("userName",user.getUserName());
+ map.put("password",user.getPassword());
+ addUserRemote(map);
+ return flag;
+ }
+ return flag;
+ }
+
+
+ @Override
+ public SysUser selectUserById(Long userId) {
+ return sysUserMapperDao.selectUserById(userId);
+ }
+
+ @Override
+ public ServiceBody addUser(SysUserVo vo) {
+ if (!this.checkUserNameUnique(vo.getUserName())) {
+ return Asserts.error("新增用户'" +vo.getUserName() + "'失败,登录账号已存在");
+ }
+ SysUser sysUser = new SysUser();
+ String userName = vo.getUserName();
+ String nickName= userName;
+// if(userName.length()>8)
+// {
+// nickName = userName.substring(0,7);
+// }
+ sysUser.setUserName(userName);
+ sysUser.setNickName(nickName);
+
+ try {
+ sysUser.setPassword(RsaUtils.encryptByPublicKey( CustomRsaProperties.publicKey,vo.getPassword()));
+ } catch (Exception e) {
+ log.error("密码转码失败:{}",e.getMessage());
+ }
+ this.insertUser(sysUser);
+ return Asserts.success("新增成功");
+ }
+
+
+ @Override
+ public void checkUserAllowed(SysUser user) {
+
+ }
+
+ @Override
+ public Boolean updateUser(SysUser user) {
+ return sysUserMapperDao.updateById(user);
+
+
+ }
+
+ @Override
+ public Boolean updateUserStatus(SysUser user) {
+ return sysUserMapperDao.updateById(user);
+ }
+
+ @Override
+ public Boolean updateUserProfile(SysUser user) {
+ return sysUserMapperDao.updateById(user);
+ }
+
+
+ @Override
+ public Boolean resetPwd(SysUser user) {
+ return sysUserMapperDao.updateById(user);
+ }
+
+ @Override
+ public Boolean resetUserPwd(String userName, String password) {
+ int count = sysUserMapperDao.resetUserPwd(userName, password);
+ return count > 0 ? true : false;
+ }
+
+ @Override
+ public int deleteUserById(Long userId) {
+ return 0;
+ }
+
+ @Override
+ public int deleteUserByIds(Long[] userIds) {
+ for (Long userId : userIds) {
+ checkUserAllowed(new SysUser(userId));
+ }
+ return sysUserMapperDao.deleteUserByIds(userIds);
+ }
+
+ @Override
+ public UserSession selectUserById(String sessionId) {
+ UserSession session = sysUserMapperDao.selectUserBySessionId(sessionId);
+ return session;
+ }
+
+ @Override
+ public int updateUserSession(UserSession user) {
+ int result = sysUserMapperDao.updateUserSession(user);
+ return result;
+ }
+
+ public boolean addUserRemote(Map map) {
+ HttpHeaders httpHeaders = new HttpHeaders();
+ httpHeaders.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE));
+ HttpEntity