liuguijing 2 years ago
commit 618ad79396

@ -30,6 +30,8 @@
<mybatis-spring-boot.version>2.2.0</mybatis-spring-boot.version>
<pagehelper.boot.version>1.4.0</pagehelper.boot.version>
<commons.fileupload.version>1.4</commons.fileupload.version>
<jwt.version>0.9.0</jwt.version>
<mybatisplus.version>3.2.0</mybatisplus.version>
</properties>
<dependencyManagement>
@ -58,6 +60,7 @@
<version>${mybatis-spring-boot.version}</version>
</dependency>
<!-- pagehelper 分页插件 -->
<dependency>
<groupId>com.github.pagehelper</groupId>
@ -72,6 +75,12 @@
<version>${swagger.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!-- swagger ui-->
<dependency>
<groupId>com.github.xiaoymin</groupId>
@ -99,6 +108,13 @@
<version>${fastjson.version}</version>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>${jwt.version}</version>
</dependency>
<!-- 文件上传工具类 -->
<dependency>

@ -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<String> login(@RequestBody SysUser sysUser) throws Exception {
ServiceBody<String> 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<String> add(@RequestBody @Validated SysUserVo vo) {
ServiceBody<String> serviceBody = sysUserService.addUser(vo);
if (serviceBody.getCode() == ServiceStatus.SUCCESS) {
return ResponseReult.success(serviceBody.getData());
} else {
return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg());
}
}
}

@ -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<TerminalStatusModel> getTerminalStatus(@RequestParam("termId")Integer termId) {
ServiceBody<TerminalStatusModel> serviceBody = terminalService.getTerminalStatus(termId);
if (serviceBody.getCode() == ServiceStatus.SUCCESS) {

@ -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=

@ -51,6 +51,12 @@
<artifactId>knife4j-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>eu.bitwalker</groupId>
<artifactId>UserAgentUtils</artifactId>
<version>1.21</version>
</dependency>
<!--指定swagger-models版本解决报错-->
<dependency>
<groupId>io.swagger</groupId>
@ -76,6 +82,20 @@
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
</dependency>
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.11</version>
</dependency>
<!-- 文件上传工具类 -->
<dependency>
<groupId>commons-fileupload</groupId>
@ -111,6 +131,11 @@
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
<build>

@ -0,0 +1,148 @@
package com.shxy.xymanager_common.base;
import com.shxy.xymanager_common.constant.HttpStatusCode;
import java.util.HashMap;
/**
* @ClassNameAjaxResult
* @Description Ajax
* @Author Arno_Fu
* @CreatTime11/26/2019 - 12:51 PM
* @Version V1.0
*/
public class AjaxResult extends HashMap<String, Object> {
/**
*
*/
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);
}
}

@ -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;
/**
* @ClassNameSysDept
* @Description .
* @Author Arno_Fu
* @CreatTime11/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<SysDept> children = new ArrayList<SysDept>();
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<SysDept> getChildren() {
return children;
}
public void setChildren(List<SysDept> 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 +
"}";
}
}

@ -0,0 +1,66 @@
package com.shxy.xymanager_common.bean;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @ClassNameSysUser
* @Description
* @Author Arno_Fu
* @CreatTime11/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;
}
}

@ -0,0 +1,117 @@
package com.shxy.xymanager_common.bean;
import java.io.Serializable;
/**
* @ClassNameSysUserOnline
* @Description 线
* @Author Arno_Fu
* @CreatTime12/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;
}
}

@ -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;
/**
* @ClassNameSysUserPost
* @Description sys_user_post
* @Author Arno_Fu
* @CreatTime12/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();
}
}

@ -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;
/**
* @ClassNameRsaProperties
* @Description
* @Author Arno_Fu
* @CreatTime12/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;
}
}

@ -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;
}

@ -0,0 +1,34 @@
package com.shxy.xymanager_common.constant;
/**
* @ClassNameUserStatus
* @Description
* @Author Arno_Fu
* @CreatTime12/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;
}
}

@ -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("-", "");
}
}

@ -0,0 +1,50 @@
package com.shxy.xymanager_common.entity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @ClassNameSysUser
* @Description
* @Author Arno_Fu
* @CreatTime11/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;
}

@ -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;
}

@ -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;
}
}

@ -0,0 +1,48 @@
package com.shxy.xymanager_common.exception;
/**
* @ClassNameUserPasswordNotMatchException
* @Description
* @Author Arno_Fu
* @CreatTime11/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;
}
}

@ -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;
/**
* @ClassNameAsyncManager
* @Description
* @Author Arno_Fu
* @CreatTime12/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);
}
}

@ -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;
/**
* @ClassNameAsyncFactory
* @Description
* @Author Arno_Fu
* @CreatTime12/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 );
}
};
}
}

@ -0,0 +1,134 @@
package com.shxy.xymanager_common.model;
import java.util.Date;
/**
* @ClassNameSysLoginLog
* @Description 访
* @Author Arno_Fu
* @CreatTime11/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;
}
}

@ -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;
/**
* @ClassNameLoginUser
* @Description
* @Author Arno_Fu
* @CreatTime11/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;
}
}

@ -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;
/**
* @ClassNameCustomAuthExceptionEntryPoint
* @Description token.
* @Author Arno_Fu
* @CreatTime11/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();
}
}
}

@ -0,0 +1,22 @@
package com.shxy.xymanager_common.util;
/**
* @ClassNameLogUtils
* @Description
* @Author Arno_Fu
* @CreatTime12/20/2019 - 5:06 PM
* @Version V1.0
*/
public class LogUtils
{
public static String getBlock(Object msg)
{
if (msg == null)
{
msg = "";
}
return "[" + msg.toString() + "]";
}
}

@ -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()));
}
}

@ -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;
/**
* @ClassNameRsaUtils
* @Description Rsa
* @Author Arno_Fu
* @CreatTime12/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;
}
}
}

@ -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;
/**
* @ClassNameSecurityUtils
* @Description
* @Author Arno_Fu
* @CreatTime12/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;
}
}

@ -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, workQueuePending,.
* 退.
* 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);
}
}
}

@ -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;
/**
* @ClassNameHttpUtils
* @Description http
* @Author Arno_Fu
* @CreatTime12/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;
}
}
}

@ -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;
}

@ -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;
/**
* @ClassNameSysUserMapper
* @Description Mapper .
* @Author Arno_Fu
* @CreatTime11/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);
}

@ -0,0 +1,85 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.shxy.xymanager_dao.dao.SysUserMapperDao">
<resultMap id="SysUserResult" type="com.shxy.xymanager_common.bean.SysUser">
<id column="id" property="userId" />
<result column="name" property="userName" />
<result column="password" property="password" />
<result column="status" property="status" />
</resultMap>
<sql id="selectUserVo">
SELECT
user_id,
user_name,
`status`
FROM
sys_user u
</sql>
<select id="selectByUserAccount" resultMap="SysUserResult">
SELECT * FROM sys_user WHERE user_name = #{userName}
</select>
<select id="selectPages" resultMap="SysUserResult">
<include refid="selectUserVo"/>
WHERE status = '0'
<if test="params.userName != null and params.userName != ''">
AND user_name like concat('%', #{params.userName}, '%')
</if>
</select>
<select id="checkUserNameUnique" parameterType="String" resultType="int">
select count(1) from sys_user where user_name = #{userName}
</select>
<select id="selectUserByUserName" parameterType="String" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_name = #{userName}
</select>
<select id="selectUserById" parameterType="Long" resultMap="SysUserResult">
<include refid="selectUserVo"/>
where u.user_id = #{userId}
</select>
<update id="resetUserPwd">
update sys_user set password = #{password} where user_name = #{userName}
</update>
<insert id="addUser" parameterType="com.shxy.xymanager_common.bean.SysUser">
insert into sys_user(user_name,nick_name,password)
values(#{userName},#{nickName},#{password})
</insert>
<select id="selectUserBySessionId" resultType="com.shxy.xymanager_common.entity.UserSession">
select
session_id as sessionId,
user_name as userName,
role,
expire_time as expireTime
from sys_user_session
where session_id = #{sessionId}
</select>
<update id="updateUserSession" parameterType="com.shxy.xymanager_common.entity.UserSession">
update `sys_user_session`
<set>
<if test="expireTime!= null">
expireTime = #{expireTime},
</if>
</set>
where session_id = #{sessionId}
</update>
<insert id="insertUserSession" parameterType="com.shxy.xymanager_common.entity.UserSession">
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})
</insert>
</mapper>

@ -26,6 +26,11 @@
<groupId>com.shxy</groupId>
<artifactId>xymanager_dao</artifactId>
</dependency>
<dependency>
<groupId>io.jsonwebtoken</groupId>
<artifactId>jjwt</artifactId>
<version>0.9.0</version>
</dependency>
</dependencies>
<!-- <build>-->
<!-- <plugins>-->

@ -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;
/**
* @ClassNameCustomPermissionService
* @Description .
* @Author Arno_Fu
* @CreatTime11/26/2019 - 8:30 PM
* @Version V1.0
*/
@Component
public class CustomPermissionServiceImpl {
/**
*
*
* @param user
* @return
*/
public Set<String> getRolePermission(SysUser user)
{
return null;
}
/**
*
*
* @param user
* @return
*/
public Set<String> getMenuPermission(SysUser user)
{
return null;
}
}

@ -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;
/**
* @ClassNameCustomUserDetailsService
* @Description .
* @Author CY
* @CreatTime11/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);
}
}

@ -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<String> 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<String> 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;
}
}

@ -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, "退出成功")));*/
}
}

@ -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;
/**
* @ClassNameSysUserServiceImpl
* @Description * .
* @Author Arno_Fu
* @CreatTime11/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<String, Object> 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<String> 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<String, Object> map) {
HttpHeaders httpHeaders = new HttpHeaders();
httpHeaders.setContentType(MediaType.parseMediaType(MediaType.APPLICATION_JSON_UTF8_VALUE));
HttpEntity<Map<String, Object>> httpEntity = new HttpEntity<>(map, httpHeaders);
/*ResponseEntity responseEntity = restTemplate.postForEntity(remoteUserAdd, httpEntity,
Object.class);
int code = responseEntity.getStatusCodeValue();*/
int code = 200;
if(code ==200)
{
return true;
}
return false;
}
}

@ -0,0 +1,22 @@
package com.shxy.xymanager_service.service;
import com.shxy.xymanager_common.bean.SysUser;
import org.springframework.security.core.userdetails.UserDetails;
import java.util.Set;
/**
* 线
*
* @author
*/
public interface CustomPermissionService {
Set<String> getRolePermission(SysUser user);
Set<String> getMenuPermission(SysUser user);
}

@ -0,0 +1,20 @@
package com.shxy.xymanager_service.service;
import com.shxy.xymanager_common.bean.SysUser;
import org.springframework.security.core.userdetails.UserDetails;
/**
* 线
*
* @author
*/
public interface CustomUserDetailsService {
UserDetails loadUserByUsername(String userAccount);
UserDetails createLoginUser(SysUser user);
}

@ -0,0 +1,41 @@
package com.shxy.xymanager_service.service;
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.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.RsaUtils;
import com.shxy.xymanager_common.util.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.DigestUtils;
import java.util.HashSet;
import java.util.Set;
/**
* @ClassNameLoginService
* @Description
* @Author Arno_Fu
* @CreatTime11/26/2019 - 9:40 PM
* @Version V1.0
*/
public interface LoginService {
ServiceBody<String> login(String username, String password) throws Exception;
ServiceBody<String> remoteLogin(String username, String password) throws Exception;
UserSession getLoginUser(String username, String password) throws Exception;
}

@ -0,0 +1,128 @@
package com.shxy.xymanager_service.service;
import com.shxy.xymanager_common.bean.ServiceBody;
import com.shxy.xymanager_common.bean.SysUser;
import com.shxy.xymanager_common.entity.UserSession;
import com.shxy.xymanager_common.vo.SysUserVo;
/**
* @ClassNameSysUserService
* @Description .
* @Author Arno_Fu
* @CreatTime11/26/2019 - 3:25 PM
* @Version V1.0
*/
public interface SysUserService {
/**
* @param userAccount
* @return com.chenxuan.entity.model.SysUser
* @Description
*/
SysUser findByUserAccount(String userAccount);
/**
* ID
*
* @param userId ID
* @return
*/
SysUser selectUserById(Long userId);
ServiceBody<String> addUser(SysUserVo vo);
/**
*
*
* @param userName
* @return
*/
Boolean checkUserNameUnique(String userName);
/**
*
*
* @param user
*/
void checkUserAllowed(SysUser user);
/**
*
*
* @param user
* @return
*/
Integer insertUser(SysUser user);
/**
*
*
* @param user
* @return
*/
Boolean updateUser(SysUser user);
/**
*
*
* @param user
* @return
*/
Boolean updateUserStatus(SysUser user);
/**
*
*
* @param user
* @return
*/
Boolean updateUserProfile(SysUser user);
/**
*
*
* @param user
* @return
*/
Boolean resetPwd(SysUser user);
/**
*
*
* @param userName
* @param password
* @return
*/
Boolean resetUserPwd(String userName, String password);
/**
* ID
*
* @param userId ID
* @return
*/
int deleteUserById(Long userId);
/**
*
*
* @param userIds ID
* @return
*/
int deleteUserByIds(Long[] userIds);
UserSession selectUserById(String sessionId);
int updateUserSession(UserSession user);
}

@ -0,0 +1,113 @@
package com.shxy.xymanager_service.service.security;
import com.shxy.xymanager_common.security.componet.CustomAuthExceptionEntryPoint;
import com.shxy.xymanager_service.impl.CustomUserDetailsServiceImpl;
import com.shxy.xymanager_service.impl.LogoutSuccessHandlerImpl;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpMethod;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.http.SessionCreationPolicy;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter;
@Configuration
@EnableWebSecurity// 这个注解必须加开启Security
@EnableGlobalMethodSecurity(prePostEnabled = true)//保证post之前的注解可以使用
@Slf4j
public class CustomSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private CustomAuthExceptionEntryPoint customAuthExceptionEntryPoint;
@Autowired
private CustomUserDetailsServiceImpl customUserDetailsServiceImpl;
@Autowired
private JwtAuthenticationTokenFilter jwtAuthenticationTokenFilter;
/**
* 退
*/
@Autowired
private LogoutSuccessHandlerImpl logoutSuccessHandler;
//先来这里认证一下
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
log.info("213123123");
auth.userDetailsService(customUserDetailsServiceImpl).passwordEncoder(passwordEncoderBean());
}
//拦截在这配
@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {
log.info("123566");
httpSecurity
// 认证失败处理类
.exceptionHandling().authenticationEntryPoint(customAuthExceptionEntryPoint).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.ALWAYS).and()
// 过滤请求
.authorizeRequests()
// 对于登录login 验证码captchaImage 允许匿名访问
.antMatchers("/login", "/captchaImage").anonymous()
.antMatchers("*/api/addUser").anonymous()
.antMatchers("**/addUser").anonymous()
.antMatchers("/addUser").anonymous()
.antMatchers(
HttpMethod.GET,
"/*.html",
"/**/*.html",
"/**/*.css",
"/**/*.js"
).permitAll()
.antMatchers("/profile/**").anonymous()
.antMatchers("/common/download**").anonymous()
.antMatchers("/swagger-ui.html").anonymous()
.antMatchers("/swagger-resources/**").anonymous()
.antMatchers("/webjars/**").anonymous()
.antMatchers("/*/api-docs").anonymous()
.antMatchers("/druid/**").anonymous()
.antMatchers("/test/**").anonymous()
.antMatchers( "/v3/**").anonymous()
.antMatchers( "/error").anonymous()
// .antMatchers("/**").anonymous()
.antMatchers("/api/**").anonymous()
// .antMatchers("/busiMainDeviceController/**").anonymous()
.antMatchers("/sysLoginRemoteController/**").anonymous()
// .antMatchers("/remote/**").anonymous()
.antMatchers("/userRemote/**").anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()
.headers().frameOptions().disable();
httpSecurity.logout().logoutUrl("/logout").logoutSuccessHandler(logoutSuccessHandler);
// 添加JWT filter
httpSecurity.addFilterBefore(jwtAuthenticationTokenFilter, UsernamePasswordAuthenticationFilter.class);
}
@Bean
public PasswordEncoder passwordEncoderBean() {
return new BCryptPasswordEncoder();
}
@Bean
@Override
public AuthenticationManager authenticationManagerBean() throws Exception {
return super.authenticationManagerBean();
}
}

@ -0,0 +1,64 @@
package com.shxy.xymanager_service.service.security;
import com.shxy.xymanager_common.entity.UserSession;
import com.shxy.xymanager_common.security.LoginUser;
import com.shxy.xymanager_common.util.MyDateUtils;
import com.shxy.xymanager_common.util.SecurityUtils;
import com.shxy.xymanager_service.service.SysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.web.authentication.WebAuthenticationDetailsSource;
import org.springframework.stereotype.Component;
import org.springframework.web.filter.OncePerRequestFilter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigInteger;
/**
* @ClassNameJwtAuthenticationTokenFilter
* @Description token token.
* @Author Arno_Fu
* @CreatTime11/26/2019 - 6:34 PM
* @Version V1.0
*/
@Component
public class JwtAuthenticationTokenFilter extends OncePerRequestFilter {
@Autowired
private SysUserService sysUserService;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws ServletException, IOException {
UserSession user = null;
if(null!= request.getSession().getAttribute("sessionId")) {
String sessionId = request.getSession().getAttribute("sessionId").toString();
user = sysUserService.selectUserById(sessionId);
BigInteger expireTime = user.getExpireTime();
BigInteger currentTime = MyDateUtils.TimeSecond2MillSecond(System.currentTimeMillis());
if (expireTime.subtract(currentTime).compareTo(BigInteger.valueOf(3600L)) > 0) {
user.setExpireTime(user.getExpireTime().add(new BigInteger(String.valueOf(30 * 1800))));
sysUserService.updateUserSession(user);
}
}
if (null != user && null == SecurityUtils.getAuthentication())
{
UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(user, null,null);
authenticationToken.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authenticationToken);
}
chain.doFilter(request, response);
}
}
Loading…
Cancel
Save