添加token更新时间

This commit is contained in:
wuchunlei
2025-01-07 09:28:58 +08:00
parent 2e40f1ff31
commit be2aee3a47
6 changed files with 44 additions and 27 deletions

View File

@@ -30,17 +30,19 @@ public class SysUserTokenEntity implements Serializable {
//用户ID //用户ID
@TableId(type = IdType.INPUT) @TableId(type = IdType.INPUT)
private Long userId; private Long userId;
//token
private String token;
//token
private String tokenMedical;
//token
private String tokenSociology;
//token
private String tokenAbroad;
//过期时间 //过期时间
private Date expireTime; private Date expireTime;
//token
private String token;
//更新时间 //更新时间
private Date updateTime; private Date updateTime;
//token
private String tokenMedical;
//更新时间
private Date medicalUpdateTime;
//token
private String tokenSociology;
//更新时间
private Date sociologyUpdateTime;
} }

View File

@@ -35,12 +35,12 @@ public class OAuth2Filter extends AuthenticatingFilter {
protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception {
//获取请求token //获取请求token
String token = getRequestToken((HttpServletRequest) request); String token = getRequestToken((HttpServletRequest) request);
//获取请求appType
String appType = getRequestAppType((HttpServletRequest) request);
if(StringUtils.isBlank(token)){ if(StringUtils.isBlank(token)){
return null; return null;
} }
return new OAuth2Token(token,appType);
return new OAuth2Token(token);
} }
@Override @Override
@@ -97,14 +97,25 @@ public class OAuth2Filter extends AuthenticatingFilter {
private String getRequestToken(HttpServletRequest httpRequest){ private String getRequestToken(HttpServletRequest httpRequest){
//从header中获取token //从header中获取token
String token = httpRequest.getHeader("token"); String token = httpRequest.getHeader("token");
//如果header中不存在token则从参数中获取token //如果header中不存在token则从参数中获取token
if(StringUtils.isBlank(token)){ if(StringUtils.isBlank(token)){
token = httpRequest.getParameter("token"); token = httpRequest.getParameter("token");
} }
return token; return token;
} }
/**
* 获取请求的appType
*/
private String getRequestAppType(HttpServletRequest httpRequest){
//从header中获取token
String appType = httpRequest.getHeader("appType");
//如果header中不存在token则从参数中获取token
if(StringUtils.isBlank(appType)){
appType = httpRequest.getParameter("appType");
}
return appType==null?"":appType;
}
} }

View File

@@ -72,6 +72,7 @@ public class OAuth2Realm extends AuthorizingRealm {
@Override @Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
String accessToken = (String) token.getPrincipal(); String accessToken = (String) token.getPrincipal();
String appType = token.getCredentials().toString();
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo();
//根据accessToken查询用户信息 //根据accessToken查询用户信息
SysUserTokenEntity tokenEntity = shiroService.queryByToken(accessToken); SysUserTokenEntity tokenEntity = shiroService.queryByToken(accessToken);
@@ -80,26 +81,27 @@ public class OAuth2Realm extends AuthorizingRealm {
throw new IncorrectCredentialsException("token失效请重新登录"); throw new IncorrectCredentialsException("token失效请重新登录");
} }
Long userId = tokenEntity.getUserId(); Long userId = tokenEntity.getUserId();
Long timeout = (tokenEntity.getExpireTime().getTime() - System.currentTimeMillis())/(1000 * 60 * 60); Long timeout = (tokenEntity.getExpireTime().getTime() - System.currentTimeMillis())/(1000 * 60 * 60);
if (timeout <= 24*10){ if (timeout <= 24*10){
// token 续期 // token 续期
//当前时间 //当前时间
Date now = new Date(); Date now = new Date();
//过期时间 //过期时间
Date expireTime = new Date(now.getTime() + (3600 *24 * 10 * 1000) ); Date expireTime = new Date(now.getTime() + (3600 *24 * 10 * 1000) );
tokenEntity.setExpireTime(expireTime); tokenEntity.setExpireTime(expireTime);
if ("".equals(appType)){
tokenEntity.setUpdateTime(now);
}else if ("medical".equals(appType)){
tokenEntity.setMedicalUpdateTime(now);
}else if ("sociology".equals(appType)){
tokenEntity.setSociologyUpdateTime(now);
}
sysUserTokenService.updateById(tokenEntity); sysUserTokenService.updateById(tokenEntity);
} }
//判断前后台用户 //判断前后台用户
if (userId >= 10000) { if (userId >= 10000) {
MyUserEntity myUserEntity = shiroService.queryAppUser(userId); MyUserEntity myUserEntity = shiroService.queryAppUser(userId);
info = new SimpleAuthenticationInfo(myUserEntity, accessToken, getName()); info = new SimpleAuthenticationInfo(myUserEntity, appType, getName());
}else { }else {
//查询用户信息 //查询用户信息
SysUserEntity user = shiroService.queryUser(tokenEntity.getUserId()); SysUserEntity user = shiroService.queryUser(tokenEntity.getUserId());
@@ -107,7 +109,7 @@ public class OAuth2Realm extends AuthorizingRealm {
if(user.getStatus() == 0){ if(user.getStatus() == 0){
throw new LockedAccountException("账号已被锁定,请联系管理员"); throw new LockedAccountException("账号已被锁定,请联系管理员");
} }
info = new SimpleAuthenticationInfo(user, accessToken, getName()); info = new SimpleAuthenticationInfo(user, appType, getName());
} }
return info; return info;

View File

@@ -18,9 +18,11 @@ import org.apache.shiro.authc.AuthenticationToken;
*/ */
public class OAuth2Token implements AuthenticationToken { public class OAuth2Token implements AuthenticationToken {
private String token; private String token;
private String appType;
public OAuth2Token(String token){ public OAuth2Token(String token,String appType){
this.token = token; this.token = token;
this.appType = appType;
} }
@Override @Override
@@ -30,6 +32,6 @@ public class OAuth2Token implements AuthenticationToken {
@Override @Override
public Object getCredentials() { public Object getCredentials() {
return token; return appType;
} }
} }

View File

@@ -46,15 +46,15 @@ public class SysUserTokenServiceImpl extends ServiceImpl<SysUserTokenDao, SysUse
String appType = request.getHeader("appType")==null?"":request.getHeader("appType"); String appType = request.getHeader("appType")==null?"":request.getHeader("appType");
if ("".equals(appType)){//同时修改 SysUserTokenDao.xml if ("".equals(appType)){//同时修改 SysUserTokenDao.xml
tokenEntity.setToken(token); tokenEntity.setToken(token);
tokenEntity.setUpdateTime(now);
}else if ("medical".equals(appType)){ }else if ("medical".equals(appType)){
tokenEntity.setTokenMedical(token); tokenEntity.setTokenMedical(token);
tokenEntity.setMedicalUpdateTime(now);
}else if ("sociology".equals(appType)){ }else if ("sociology".equals(appType)){
tokenEntity.setTokenSociology(token); tokenEntity.setTokenSociology(token);
}else if ("abroad".equals(appType)){ tokenEntity.setSociologyUpdateTime(now);
tokenEntity.setTokenAbroad(token);
} }
tokenEntity.setUserId(userId); tokenEntity.setUserId(userId);
tokenEntity.setUpdateTime(now);
tokenEntity.setExpireTime(expireTime); tokenEntity.setExpireTime(expireTime);
this.saveOrUpdate(tokenEntity); this.saveOrUpdate(tokenEntity);
R r = R.ok().put("token", token).put("expire", EXPIRE); R r = R.ok().put("token", token).put("expire", EXPIRE);

View File

@@ -4,6 +4,6 @@
<mapper namespace="com.peanut.modules.sys.dao.SysUserTokenDao"> <mapper namespace="com.peanut.modules.sys.dao.SysUserTokenDao">
<select id="queryByToken" resultType="com.peanut.modules.sys.entity.SysUserTokenEntity"> <select id="queryByToken" resultType="com.peanut.modules.sys.entity.SysUserTokenEntity">
select * from sys_user_token where (token = #{value} or token_medical = #{value} or token_sociology = #{value} or token_abroad = #{value}) select * from sys_user_token where (token = #{value} or token_medical = #{value} or token_sociology = #{value})
</select> </select>
</mapper> </mapper>