修改了权限认证,添加了账号过期时间的限制

This commit is contained in:
DESKTOP-4U0TDEF\20371 2021-07-14 16:06:34 +08:00
parent 046996bb78
commit 4133e08f46
9 changed files with 148 additions and 60 deletions

View File

@ -5,6 +5,7 @@ import com.xkrs.model.entity.SysUserEntity;
import com.xkrs.service.SysAuthorityService; import com.xkrs.service.SysAuthorityService;
import com.xkrs.service.SysRoleService; import com.xkrs.service.SysRoleService;
import com.xkrs.service.SysUserService; import com.xkrs.service.SysUserService;
import com.xkrs.utils.DateTimeUtil;
import org.springframework.security.authentication.AuthenticationProvider; import org.springframework.security.authentication.AuthenticationProvider;
import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.BadCredentialsException;
import org.springframework.security.authentication.DisabledException; import org.springframework.security.authentication.DisabledException;
@ -16,6 +17,7 @@ import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct; import javax.annotation.PostConstruct;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -82,6 +84,12 @@ public class CustomAuthenticationProvider implements AuthenticationProvider {
throw new DisabledException("用户状态不正常,请联系管理员"); throw new DisabledException("用户状态不正常,请联系管理员");
} }
if(userEntity.getDayNum() == 7){
if(DateTimeUtil.dateTimeToString(LocalDateTime.now()).compareTo(userEntity.getOverTime()) > 0){
throw new DisabledException("该账号已过期,请联系管理员");
}
}
// 认证逻辑 // 认证逻辑
String encryptPassword = encry256(password + userEntity.getSalt()); String encryptPassword = encry256(password + userEntity.getSalt());
if (encryptPassword.equals(userEntity.getPassword())) { if (encryptPassword.equals(userEntity.getPassword())) {

View File

@ -3,6 +3,7 @@ package com.xkrs.common.account;
import com.xkrs.common.encapsulation.OutputEncapsulation; import com.xkrs.common.encapsulation.OutputEncapsulation;
import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.common.encapsulation.PromptMessageEnum;
import com.xkrs.model.entity.SysUserEntity; import com.xkrs.model.entity.SysUserEntity;
import com.xkrs.utils.DateTimeUtil;
import io.jsonwebtoken.Claims; import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts; import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys; import io.jsonwebtoken.security.Keys;
@ -18,6 +19,8 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import java.io.IOException; import java.io.IOException;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.*; import java.util.*;
/** /**
@ -27,10 +30,7 @@ import java.util.*;
public class TokenAuthenticationService { public class TokenAuthenticationService {
private static final Logger logger = LoggerFactory.getLogger(TokenAuthenticationService.class); private static final Logger logger = LoggerFactory.getLogger(TokenAuthenticationService.class);
/**
* 过期时间6小时
*/
static public final long EXPIRATIONTIME = 21_600_000;
/** /**
* 加密密钥 * 加密密钥
*/ */
@ -70,6 +70,16 @@ public class TokenAuthenticationService {
}else{ }else{
logger.warn(userName +" has no permission!"); logger.warn(userName +" has no permission!");
} }
if(sysUserEntity.getDayNum() == 7){
// 结束的时间
LocalDateTime overTime = DateTimeUtil.stringToDateTime(sysUserEntity.getOverTime());
// 计算距离结束时间的天数作为token
Duration duration = Duration.between(LocalDateTime.now(), overTime);
/**
* 动态设置过期时间
*/
final long EXPIRATIONTIME = 60 * 60 * 24L * duration.toDays();
// 生成JWT // 生成JWT
String jwt = Jwts.builder() String jwt = Jwts.builder()
.setSubject(userName) .setSubject(userName)
@ -85,6 +95,28 @@ public class TokenAuthenticationService {
map.put("token",jwt); map.put("token",jwt);
map.put("role",authsList); map.put("role",authsList);
map.put("user",sysUserEntity); map.put("user",sysUserEntity);
}else {
/**
* 过期时间6小时
*/
final long EXPIRATIONTIME = 21_600_000;
// 生成JWT
String jwt = Jwts.builder()
.setSubject(userName)
.setIssuer("https://www.microservice.com")
.setAudience(userName)
// 保存权限
.claim("auths", authsList)
// 有效期设置
.setExpiration(new Date(System.currentTimeMillis() + EXPIRATIONTIME))
// 签名设置
.signWith(key)
.compact();
map.put("token",jwt);
map.put("role",authsList);
map.put("user",sysUserEntity);
}
// JWT 写入 body // JWT 写入 body
PrintWriter out = null; PrintWriter out = null;
try { try {

View File

@ -1,13 +1,15 @@
package com.xkrs.controller; package com.xkrs.controller;
import com.xkrs.common.encapsulation.PromptMessageEnum; import com.xkrs.common.encapsulation.PromptMessageEnum;
import com.xkrs.common.tool.TokenUtil;
import com.xkrs.dao.SysUserDao;
import com.xkrs.model.entity.FirePointEntity; import com.xkrs.model.entity.FirePointEntity;
import com.xkrs.model.entity.SysUserEntity;
import com.xkrs.model.qo.FirePointQo; import com.xkrs.model.qo.FirePointQo;
import com.xkrs.service.FirePointService; import com.xkrs.service.FirePointService;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.util.Locale; import java.util.Locale;
@ -18,11 +20,14 @@ import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulat
* @author XinYi Song * @author XinYi Song
*/ */
@RestController @RestController
public class FirePointServiceController { public class FirePointController {
@Resource @Resource
private FirePointService firePointService; private FirePointService firePointService;
@Resource
private SysUserDao sysUserDao;
/** /**
* 添加火点数据 * 添加火点数据
* @param firePointQo * @param firePointQo
@ -39,4 +44,23 @@ public class FirePointServiceController {
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"添加成功",locale); return outputEncapsulationObject(PromptMessageEnum.SUCCESS,"添加成功",locale);
} }
} }
/**
* 测试
* @param token
* @return
*/
@GetMapping("/selectUserName")
@PreAuthorize("hasAnyAuthority('auth_general_user')")
public String selectUserName(@RequestHeader(value="Authorization") String token){
// 获取区域信息
Locale locale = LocaleContextHolder.getLocale();
// 验证token
String tokenUserName = TokenUtil.getTokenUserName(token);
SysUserEntity sysUserEntity = sysUserDao.selectByUserName(tokenUserName);
if(sysUserEntity == null){
return outputEncapsulationObject(PromptMessageEnum.USER_LOGIN_ERROR,"您还没有注册登录,请先注册登录",locale);
}
return outputEncapsulationObject(PromptMessageEnum.SUCCESS,sysUserEntity.getUserName(),locale);
}
} }

View File

@ -82,7 +82,7 @@ public interface SysUserDao extends JpaRepository<SysUserEntity,Integer> {
* 查询用户信息 * 查询用户信息
* @return * @return
*/ */
@Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,userDepartment,activeFlag,addTime) " + @Query(value = "select new com.xkrs.model.vo.SysUserVo (id,reallyName,telephone,countyCode,activeFlag,addTime) " +
"from SysUserEntity") "from SysUserEntity")
List<SysUserVo> selectAll(); List<SysUserVo> selectAll();

View File

@ -45,11 +45,8 @@ public class SysUserEntity implements Serializable {
@Column(length = 16, unique = true, columnDefinition = "varchar(16)") @Column(length = 16, unique = true, columnDefinition = "varchar(16)")
private String telephone; private String telephone;
/**
* 所在部门
*/
@Column(length = 32, columnDefinition = "varchar(32)") @Column(length = 32, columnDefinition = "varchar(32)")
private String userDepartment; private String countyCode;
@Column(columnDefinition = "varchar(192)") @Column(columnDefinition = "varchar(192)")
private String signature; private String signature;
@ -61,7 +58,7 @@ public class SysUserEntity implements Serializable {
private Integer statusCode; private Integer statusCode;
@Column(nullable = false) @Column(nullable = false)
private LocalDateTime addTime; private String addTime;
private LocalDateTime lastEntryTime; private LocalDateTime lastEntryTime;
@ -76,6 +73,11 @@ public class SysUserEntity implements Serializable {
*/ */
private Integer dayNum; private Integer dayNum;
/**
* 账号到期的时间
*/
private String overTime;
public Integer getId() { public Integer getId() {
return id; return id;
} }
@ -124,12 +126,12 @@ public class SysUserEntity implements Serializable {
this.telephone = telephone; this.telephone = telephone;
} }
public String getUserDepartment() { public String getCountyCode() {
return userDepartment; return countyCode;
} }
public void setUserDepartment(String userDepartment) { public void setCountyCode(String countyCode) {
this.userDepartment = userDepartment; this.countyCode = countyCode;
} }
public String getSignature() { public String getSignature() {
@ -156,11 +158,11 @@ public class SysUserEntity implements Serializable {
this.statusCode = statusCode; this.statusCode = statusCode;
} }
public LocalDateTime getAddTime() { public String getAddTime() {
return addTime; return addTime;
} }
public void setAddTime(LocalDateTime addTime) { public void setAddTime(String addTime) {
this.addTime = addTime; this.addTime = addTime;
} }
@ -196,6 +198,14 @@ public class SysUserEntity implements Serializable {
this.dayNum = dayNum; this.dayNum = dayNum;
} }
public String getOverTime() {
return overTime;
}
public void setOverTime(String overTime) {
this.overTime = overTime;
}
@Override @Override
public String toString() { public String toString() {
return "SysUserEntity{" + return "SysUserEntity{" +
@ -205,15 +215,16 @@ public class SysUserEntity implements Serializable {
", password='" + password + '\'' + ", password='" + password + '\'' +
", salt='" + salt + '\'' + ", salt='" + salt + '\'' +
", telephone='" + telephone + '\'' + ", telephone='" + telephone + '\'' +
", userDepartment='" + userDepartment + '\'' + ", countyCode='" + countyCode + '\'' +
", signature='" + signature + '\'' + ", signature='" + signature + '\'' +
", activeFlag=" + activeFlag + ", activeFlag=" + activeFlag +
", statusCode=" + statusCode + ", statusCode=" + statusCode +
", addTime=" + addTime + ", addTime='" + addTime + '\'' +
", lastEntryTime=" + lastEntryTime + ", lastEntryTime=" + lastEntryTime +
", deleteFlag=" + deleteFlag + ", deleteFlag=" + deleteFlag +
", lastEntryIp='" + lastEntryIp + '\'' + ", lastEntryIp='" + lastEntryIp + '\'' +
", dayNum=" + dayNum + ", dayNum=" + dayNum +
", overTime='" + overTime + '\'' +
'}'; '}';
} }
} }

View File

@ -47,7 +47,7 @@ public class SysUserQo {
@Range(min=0,max=2,message = "{SysUser.statusCode.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class}) @Range(min=0,max=2,message = "{SysUser.statusCode.illegal}",groups = {SysUserQoInsert.class, SysUserQoUpdate.class})
private Integer statusCode; private Integer statusCode;
private String userDepartment; private String countyCode;
@NotNull(message = "{SysUser.deleteFlag.null}",groups={SysUserQoUpdate.class}) @NotNull(message = "{SysUser.deleteFlag.null}",groups={SysUserQoUpdate.class})
private Integer deleteFlag; private Integer deleteFlag;
@ -104,12 +104,12 @@ public class SysUserQo {
this.statusCode = statusCode; this.statusCode = statusCode;
} }
public String getUserDepartment() { public String getCountyCode() {
return userDepartment; return countyCode;
} }
public void setUserDepartment(String userDepartment) { public void setCountyCode(String countyCode) {
this.userDepartment = userDepartment; this.countyCode = countyCode;
} }
public Integer getDeleteFlag() { public Integer getDeleteFlag() {

View File

@ -14,17 +14,17 @@ public class SysUserVo implements Serializable {
private String telephone; private String telephone;
private String userDepartment; private String countyCode;
private Integer activeFlag; private Integer activeFlag;
private LocalDateTime addTime; private String addTime;
public SysUserVo(Integer id, String reallyName, String telephone, String userDepartment, Integer activeFlag, LocalDateTime addTime) { public SysUserVo(Integer id, String reallyName, String telephone, String countyCode, Integer activeFlag, String addTime) {
this.id = id; this.id = id;
this.reallyName = reallyName; this.reallyName = reallyName;
this.telephone = telephone; this.telephone = telephone;
this.userDepartment = userDepartment; this.countyCode = countyCode;
this.activeFlag = activeFlag; this.activeFlag = activeFlag;
this.addTime = addTime; this.addTime = addTime;
} }
@ -53,12 +53,12 @@ public class SysUserVo implements Serializable {
this.telephone = telephone; this.telephone = telephone;
} }
public String getUserDepartment() { public String getCountyCode() {
return userDepartment; return countyCode;
} }
public void setUserDepartment(String userDepartment) { public void setCountyCode(String countyCode) {
this.userDepartment = userDepartment; this.countyCode = countyCode;
} }
public Integer getActiveFlag() { public Integer getActiveFlag() {
@ -69,11 +69,11 @@ public class SysUserVo implements Serializable {
this.activeFlag = activeFlag; this.activeFlag = activeFlag;
} }
public LocalDateTime getAddTime() { public String getAddTime() {
return addTime; return addTime;
} }
public void setAddTime(LocalDateTime addTime) { public void setAddTime(String addTime) {
this.addTime = addTime; this.addTime = addTime;
} }
@ -83,9 +83,9 @@ public class SysUserVo implements Serializable {
"id=" + id + "id=" + id +
", reallyName='" + reallyName + '\'' + ", reallyName='" + reallyName + '\'' +
", telephone='" + telephone + '\'' + ", telephone='" + telephone + '\'' +
", userDepartment='" + userDepartment + '\'' + ", countyCode='" + countyCode + '\'' +
", activeFlag=" + activeFlag + ", activeFlag=" + activeFlag +
", addTime=" + addTime + ", addTime='" + addTime + '\'' +
'}'; '}';
} }
} }

View File

@ -12,6 +12,7 @@ import com.xkrs.model.entity.SysUserEntity;
import com.xkrs.model.qo.SysUserQo; import com.xkrs.model.qo.SysUserQo;
import com.xkrs.model.vo.SysUserVo; import com.xkrs.model.vo.SysUserVo;
import com.xkrs.service.SysUserService; import com.xkrs.service.SysUserService;
import com.xkrs.utils.DateTimeUtil;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
@ -20,10 +21,12 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Locale; import java.util.Locale;
import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject; import static com.xkrs.common.encapsulation.OutputEncapsulation.outputEncapsulationObject;
import static com.xkrs.utils.DateTimeUtil.dateTimeToString;
import static com.xkrs.utils.DateTimeUtil.getNowTime; import static com.xkrs.utils.DateTimeUtil.getNowTime;
import static com.xkrs.utils.EncryptDecryptUtil.encry256; import static com.xkrs.utils.EncryptDecryptUtil.encry256;
@ -73,12 +76,14 @@ public class SysUserServiceImpl implements SysUserService {
sysUserEntity.setSalt(salt); sysUserEntity.setSalt(salt);
sysUserEntity.setPassword(encry256(sysUserQo.getPassword() + salt)); sysUserEntity.setPassword(encry256(sysUserQo.getPassword() + salt));
sysUserEntity.setTelephone(sysUserQo.getUserName()); sysUserEntity.setTelephone(sysUserQo.getUserName());
sysUserEntity.setUserDepartment(sysUserQo.getUserDepartment()); sysUserEntity.setCountyCode(sysUserQo.getCountyCode());
sysUserEntity.setActiveFlag(0); sysUserEntity.setActiveFlag(0);
sysUserEntity.setStatusCode(0); sysUserEntity.setStatusCode(0);
sysUserEntity.setAddTime(getNowTime()); sysUserEntity.setAddTime(dateTimeToString(LocalDateTime.now()));
sysUserEntity.setDeleteFlag(0); sysUserEntity.setDeleteFlag(0);
sysUserEntity.setDayNum(7); sysUserEntity.setDayNum(7);
String string = dateTimeToString(LocalDateTime.now().plusDays(7L));
sysUserEntity.setOverTime(string);
sysUserDao.save(sysUserEntity); sysUserDao.save(sysUserEntity);

View File

@ -1,9 +1,6 @@
package com.xkrs.utils; package com.xkrs.utils;
import java.time.Instant; import java.time.*;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatter;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@ -217,6 +214,17 @@ public class DateTimeUtil {
//long l = dateToTimeMillis(LocalDateTime.now()); //long l = dateToTimeMillis(LocalDateTime.now());
//timeMillisToString(1626082306233) //timeMillisToString(1626082306233)
//System.out.println(l); //System.out.println(l);
/*LocalDateTime date3 = LocalDateTime.now();
LocalDateTime date4 = LocalDateTime.of(2021, 7, 16, 22, 30, 10);
Duration duration = Duration.between(date3, date4);
long l = duration.toDays();
long i = 60*60*l;
System.out.println(i);*/
String s = "3600";
String[] split = s.split("0");
for (int i = 0; i < split.length; i++) {
System.out.println(split[i]);
}
} }
} }