This commit is contained in:
xiangwb
2017-11-07 11:43:10 +08:00
parent c7a1e35989
commit 8ae126d600
15 changed files with 319 additions and 139 deletions
@@ -54,6 +54,26 @@ public class CommonEnum {
}
}
public enum LoginInOutEnum {
IN("登录", 1), OUT("登出", 2);
// 成员变量
private String name;
private int value;
private LoginInOutEnum(String name, int value) {
this.value = value;
this.name = name;
}
public int getValue() {
return value;
}
public String getName() {
return name;
}
}
public static void main(String[] args) {
String code = "Y";
// for (YesOrNoEnum yesOrNoEnum : YesOrNoEnum.values()) {
@@ -0,0 +1,32 @@
package com.xwbing.entity;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.persistence.Column;
import javax.persistence.Entity;
/**
* 项目名称: boot-module-demo
* 创建时间: 2017/11/7 9:46
* 作者: xiangwb
* 说明: 用户登录登出信息
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Entity(name = "sys_user_login_in_out")
public class SysUserLoginInOut extends BaseEntity {
private static final long serialVersionUID = -2719103095945780275L;
public static String table = "sys_user_login_in_out";
private String ip;
@Column(name = "inout_type")
private int inoutType;
@Column(name = "user_id")
private String userId;
//临时字段
private transient String userIdName;
private transient String recordTime;
private transient String inoutTypeName;
// private transient String startDate;
// private transient String endDate;
}
@@ -1,5 +1,6 @@
package com.xwbing.entity.model;
import lombok.Data;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotBlank;
@@ -18,7 +19,7 @@ import java.util.Date;
* 创建时间: 2017/5/17 16:13
* 作者: xiangwb
*/
@Data
public class ValidateModel {
@NotBlank(message = "name不能为空")
@Length(max = 50, message = "name长度为1-50")
@@ -45,60 +46,4 @@ public class ValidateModel {
@NotBlank(message = "sex不能为空")
@Pattern(regexp = "[01]", message = "sex格式为0|1,0代表女,1代表男")
private String sex;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public double getMoney() {
return money;
}
public void setMoney(double money) {
this.money = money;
}
public Date getBirthDay() {
return birthDay;
}
public void setBirthDay(Date birthDay) {
this.birthDay = birthDay;
}
public String getHappyTime() {
return happyTime;
}
public void setHappyTime(String happyTime) {
this.happyTime = happyTime;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
}
@@ -9,5 +9,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
* 创建时间: 2017/5/5 16:44
* 作者: xiangwb
*/
public interface AuthorityRepository extends JpaRepository<SysAuthority,String> {
public interface SysAuthorityRepository extends JpaRepository<SysAuthority,String> {
}
@@ -9,5 +9,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
* 创建时间: 2017/5/5 16:44
* 作者: xiangwb
*/
public interface RoleRepository extends JpaRepository<SysRole,String> {
public interface SysRoleRepository extends JpaRepository<SysRole,String> {
}
@@ -0,0 +1,16 @@
package com.xwbing.repository;
import com.xwbing.entity.SysUserLoginInOut;
import org.springframework.data.jpa.repository.JpaRepository;
import java.util.List;
/**
* 项目名称: boot-module-demo
* 创建时间: 2017/11/7 9:58
* 作者: xiangwb
* 说明:
*/
public interface SysUserLoginInOutRepository extends JpaRepository<SysUserLoginInOut, String> {
List<SysUserLoginInOut> getByInoutType(int inout);
}
@@ -8,6 +8,6 @@ import org.springframework.data.jpa.repository.JpaRepository;
* 创建时间: 2017/5/5 16:44
* 作者: xiangwb
*/
public interface UserRepository extends JpaRepository<SysUser, String> {
public interface SysUserRepository extends JpaRepository<SysUser, String> {
SysUser findByUserName(String name);
}
@@ -0,0 +1,74 @@
package com.xwbing.service;
import com.xwbing.constant.CommonEnum;
import com.xwbing.entity.SysUser;
import com.xwbing.entity.SysUserLoginInOut;
import com.xwbing.repository.SysUserLoginInOutRepository;
import com.xwbing.util.DateUtil2;
import com.xwbing.util.PassWordUtil;
import com.xwbing.util.RestMessage;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
/**
* 项目名称: boot-module-demo
* 创建时间: 2017/11/7 9:56
* 作者: xiangwb
* 说明: 用户登录登出服务层
*/
@Service
public class SysUserLoginInOutService {
@Resource
private SysUserLoginInOutRepository loginInOutRepository;
@Resource
private SysUserService sysUserService;
/**
* 保存
*
* @param inOut
* @return
*/
public RestMessage save(SysUserLoginInOut inOut) {
RestMessage result = new RestMessage();
inOut.setId(PassWordUtil.createId());
SysUserLoginInOut save = loginInOutRepository.save(inOut);
if (save != null) {
result.setSuccess(true);
result.setMessage("保存登录登出信息成功");
} else {
result.setMessage("保存登录登出信息失败");
}
return result;
}
/**
* 根据类型列表查询
*
* @param inout
* @return
*/
public List<SysUserLoginInOut> listByType(int inout) {
Map<String, SysUser> userMap = sysUserService.listAll().stream().collect(Collectors.toMap(SysUser::getId, Function.identity()));
List<SysUserLoginInOut> list = loginInOutRepository.getByInoutType(inout);
if (CollectionUtils.isNotEmpty(list)) {
if (MapUtils.isNotEmpty(userMap)) {
list.forEach(inOut -> {
inOut.setUserIdName(userMap.get(inOut.getUserId()).getName());//用户姓名
inOut.setRecordTime(DateUtil2.dateToStr(inOut.getCreateTime(), DateUtil2.YYYY_MM_DD_HH_MM_SS));//记录时间
CommonEnum.LoginInOutEnum inOutEnum = Arrays.stream(CommonEnum.LoginInOutEnum.values()).filter(obj -> obj.getValue() == inout).findFirst().get();//登录登出
inOut.setInoutTypeName(inOutEnum.getName());
});
}
}
return list;
}
}
@@ -5,15 +5,16 @@ import com.xwbing.constant.CommonConstant;
import com.xwbing.constant.CommonEnum;
import com.xwbing.entity.SysConfig;
import com.xwbing.entity.SysUser;
import com.xwbing.util.CommonDataUtil;
import com.xwbing.entity.SysUserLoginInOut;
import com.xwbing.entity.model.EmailModel;
import com.xwbing.exception.BusinessException;
import com.xwbing.repository.UserRepository;
import com.xwbing.repository.SysUserRepository;
import com.xwbing.util.*;
import org.apache.commons.collections.CollectionUtils;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
@@ -25,11 +26,13 @@ import java.util.List;
* 作者: xiangwb
*/
@Service
public class UserService {
public class SysUserService {
@Resource
private UserRepository userRepository;
private SysUserRepository sysUserRepository;
@Resource
private SysConfigService sysConfigService;
@Resource
private SysUserLoginInOutService loginInOutService;
/**
* 增
@@ -51,7 +54,7 @@ public class UserService {
sysUser.setPassword(res[2]);
// 设置否管理员
sysUser.setAdmin(CommonEnum.YesOrNoEnum.NO.getCode());
SysUser one = userRepository.save(sysUser);
SysUser one = sysUserRepository.save(sysUser);
if (one == null) {
throw new BusinessException("新增用户失败");
}
@@ -83,7 +86,7 @@ public class UserService {
if (CommonEnum.YesOrNoEnum.YES.getCode().equals(old.getAdmin())) {
throw new BusinessException("不能对管理员进行删除操作");
}
userRepository.delete(id);
sysUserRepository.delete(id);
result.setMessage("删除成功");
result.setSuccess(true);
return result;
@@ -114,7 +117,7 @@ public class UserService {
old.setSex(sysUser.getSex());
old.setModifiedTime(new Date());
// old.setUserName(sysUser.getUserName());//用户名不能修改
SysUser one = userRepository.save(old);
SysUser one = sysUserRepository.save(old);
if (one != null) {
result.setMessage("更新成功");
result.setSuccess(true);
@@ -131,7 +134,7 @@ public class UserService {
* @return
*/
public SysUser findOne(String id) {
return userRepository.findOne(id);
return sysUserRepository.findOne(id);
}
/**
@@ -140,7 +143,7 @@ public class UserService {
* @return
*/
public List<SysUser> listAll() {
List<SysUser> all = userRepository.findAll();
List<SysUser> all = sysUserRepository.findAll();
if (CollectionUtils.isNotEmpty(all)) {
all.forEach(sysUser -> {
CommonEnum.SexEnum sexEnum = Arrays.stream(CommonEnum.SexEnum.values()).filter(obj -> obj.getCode().equals(sysUser.getSex())).findFirst().get();
@@ -174,7 +177,7 @@ public class UserService {
old.setSalt(str[1]);
old.setPassword(str[2]);
old.setModifiedTime(new Date());
SysUser save = userRepository.save(old);
SysUser save = sysUserRepository.save(old);
if (save == null)
throw new BusinessException("重置密码失败");
boolean send = sendEmail(old, str[0]);
@@ -204,7 +207,7 @@ public class UserService {
sysUser.setSalt(str[1]);
sysUser.setPassword(str[2]);
sysUser.setModifiedTime(new Date());
SysUser save = userRepository.save(sysUser);
SysUser save = sysUserRepository.save(sysUser);
if (save != null) {
result.setMessage("修改密码成功");
result.setSuccess(true);
@@ -222,7 +225,7 @@ public class UserService {
* @param checkCode
* @return
*/
public RestMessage login(String userName, String passWord, String checkCode) {
public RestMessage login(HttpServletRequest request, String userName, String passWord, String checkCode) {
RestMessage restMessage = new RestMessage();
String imgCode = (String) CommonDataUtil.getToken(CommonConstant.KEY_CAPTCHA);
//验证验证码
@@ -238,11 +241,49 @@ public class UserService {
throw new BusinessException("密码错误");
CommonDataUtil.setToken(CommonConstant.CURRENT_USER, userName);
CommonDataUtil.setToken(CommonConstant.CURRENT_USER_ID, user.getId());
//保存登录信息
SysUserLoginInOut loginInOut = new SysUserLoginInOut();
loginInOut.setCreateTime(new Date());
loginInOut.setUserId(user.getId());
loginInOut.setInoutType(CommonEnum.LoginInOutEnum.IN.getValue());
loginInOut.setIp(IpUtil.getIpAddr(request));
RestMessage save = loginInOutService.save(loginInOut);
if (!save.isSuccess())
throw new BusinessException("保存用户登录日志失败");
restMessage.setSuccess(true);
restMessage.setMessage("登录成功");
return restMessage;
}
/**
* 登出
*
* @param request
* @return
*/
public RestMessage logout(HttpServletRequest request) {
RestMessage restMessage = new RestMessage();
String userId = (String) CommonDataUtil.getToken(CommonConstant.CURRENT_USER_ID);
SysUser user = findOne(userId);
if (user != null) {
CommonDataUtil.clearMap();
SysUserLoginInOut loginInOut = new SysUserLoginInOut();
loginInOut.setCreateTime(new Date());
loginInOut.setUserId(user.getId());
loginInOut.setInoutType(CommonEnum.LoginInOutEnum.OUT.getValue());
loginInOut.setIp(IpUtil.getIpAddr(request));
restMessage = loginInOutService.save(loginInOut);
if (restMessage.isSuccess()) {
restMessage.setMessage("登出成功");
} else {
restMessage.setMessage("保存用户登出信息失败");
}
} else {
restMessage.setMessage("没有获取到用户登录信息,请重新登录");
}
return restMessage;
}
/**
* 根据用户名查找用户
*
@@ -250,7 +291,7 @@ public class UserService {
* @return
*/
private SysUser findByUserName(String userName) {
return userRepository.findByUserName(userName);
return sysUserRepository.findByUserName(userName);
}
/**
@@ -0,0 +1,51 @@
package com.xwbing.util;
import javax.servlet.http.HttpServletRequest;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* 项目名称: boot-module-demo
* 创建时间: 2017/11/7 10:24
* 作者: xiangwb
* 说明:
*/
public class IpUtil {
public static String getIpAddr(HttpServletRequest request) {
// 获取X-Forwarded-For
String ip = request.getHeader("x-forwarded-for");
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
// 获取Proxy-Client-IP
ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
// WL-Proxy-Client-IP
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0
|| "unknown".equalsIgnoreCase(ip)) {
// 获取的IP实际上是代理服务器的地址,并不是客户端的IP地址
ip = request.getRemoteAddr();
if (ip.equals("127.0.0.1")
|| ip.equals("0:0:0:0:0:0:0:1")) {
// 根据网卡取本机配置的IP
InetAddress inet = null;
try {
inet = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
e.printStackTrace();
}
ip = inet.getHostAddress();
}
}
// 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割
if (ip != null && ip.length() > 15) { // "***.***.***.***".length()
if (ip.indexOf(",") > 0) {
ip = ip.substring(0, ip.indexOf(","));
}
}
return ip;
}
}
@@ -1,6 +0,0 @@
package com.xwbing.util;
public class ThreadLocalUtil {
}