From be2aee3a47659757d89765adfe9bb7ec5c37a93c Mon Sep 17 00:00:00 2001 From: wuchunlei Date: Tue, 7 Jan 2025 09:28:58 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0token=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sys/entity/SysUserTokenEntity.java | 18 +++++++++------- .../modules/sys/oauth2/OAuth2Filter.java | 21 ++++++++++++++----- .../modules/sys/oauth2/OAuth2Realm.java | 18 +++++++++------- .../modules/sys/oauth2/OAuth2Token.java | 6 ++++-- .../service/impl/SysUserTokenServiceImpl.java | 6 +++--- .../resources/mapper/sys/SysUserTokenDao.xml | 2 +- 6 files changed, 44 insertions(+), 27 deletions(-) diff --git a/src/main/java/com/peanut/modules/sys/entity/SysUserTokenEntity.java b/src/main/java/com/peanut/modules/sys/entity/SysUserTokenEntity.java index 723fa54a..1ef2aaff 100644 --- a/src/main/java/com/peanut/modules/sys/entity/SysUserTokenEntity.java +++ b/src/main/java/com/peanut/modules/sys/entity/SysUserTokenEntity.java @@ -30,17 +30,19 @@ public class SysUserTokenEntity implements Serializable { //用户ID @TableId(type = IdType.INPUT) private Long userId; - //token - private String token; - //token - private String tokenMedical; - //token - private String tokenSociology; - //token - private String tokenAbroad; //过期时间 private Date expireTime; + //token + private String token; //更新时间 private Date updateTime; + //token + private String tokenMedical; + //更新时间 + private Date medicalUpdateTime; + //token + private String tokenSociology; + //更新时间 + private Date sociologyUpdateTime; } diff --git a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Filter.java b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Filter.java index 5ed24eb6..1960e0de 100644 --- a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Filter.java +++ b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Filter.java @@ -35,12 +35,12 @@ public class OAuth2Filter extends AuthenticatingFilter { protected AuthenticationToken createToken(ServletRequest request, ServletResponse response) throws Exception { //获取请求token String token = getRequestToken((HttpServletRequest) request); - + //获取请求appType + String appType = getRequestAppType((HttpServletRequest) request); if(StringUtils.isBlank(token)){ return null; } - - return new OAuth2Token(token); + return new OAuth2Token(token,appType); } @Override @@ -97,14 +97,25 @@ public class OAuth2Filter extends AuthenticatingFilter { private String getRequestToken(HttpServletRequest httpRequest){ //从header中获取token String token = httpRequest.getHeader("token"); - //如果header中不存在token,则从参数中获取token if(StringUtils.isBlank(token)){ token = httpRequest.getParameter("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; + } + } diff --git a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Realm.java b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Realm.java index 382512d4..e1c78e98 100644 --- a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Realm.java +++ b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Realm.java @@ -72,6 +72,7 @@ public class OAuth2Realm extends AuthorizingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { String accessToken = (String) token.getPrincipal(); + String appType = token.getCredentials().toString(); SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(); //根据accessToken,查询用户信息 SysUserTokenEntity tokenEntity = shiroService.queryByToken(accessToken); @@ -80,26 +81,27 @@ public class OAuth2Realm extends AuthorizingRealm { throw new IncorrectCredentialsException("token失效,请重新登录"); } Long userId = tokenEntity.getUserId(); - Long timeout = (tokenEntity.getExpireTime().getTime() - System.currentTimeMillis())/(1000 * 60 * 60); - if (timeout <= 24*10){ // token 续期 //当前时间 Date now = new Date(); //过期时间 Date expireTime = new Date(now.getTime() + (3600 *24 * 10 * 1000) ); - 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); } - - //判断前后台用户 if (userId >= 10000) { MyUserEntity myUserEntity = shiroService.queryAppUser(userId); - info = new SimpleAuthenticationInfo(myUserEntity, accessToken, getName()); + info = new SimpleAuthenticationInfo(myUserEntity, appType, getName()); }else { //查询用户信息 SysUserEntity user = shiroService.queryUser(tokenEntity.getUserId()); @@ -107,7 +109,7 @@ public class OAuth2Realm extends AuthorizingRealm { if(user.getStatus() == 0){ throw new LockedAccountException("账号已被锁定,请联系管理员"); } - info = new SimpleAuthenticationInfo(user, accessToken, getName()); + info = new SimpleAuthenticationInfo(user, appType, getName()); } return info; diff --git a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Token.java b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Token.java index a7a56e8d..7ab152e2 100644 --- a/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Token.java +++ b/src/main/java/com/peanut/modules/sys/oauth2/OAuth2Token.java @@ -18,9 +18,11 @@ import org.apache.shiro.authc.AuthenticationToken; */ public class OAuth2Token implements AuthenticationToken { private String token; + private String appType; - public OAuth2Token(String token){ + public OAuth2Token(String token,String appType){ this.token = token; + this.appType = appType; } @Override @@ -30,6 +32,6 @@ public class OAuth2Token implements AuthenticationToken { @Override public Object getCredentials() { - return token; + return appType; } } diff --git a/src/main/java/com/peanut/modules/sys/service/impl/SysUserTokenServiceImpl.java b/src/main/java/com/peanut/modules/sys/service/impl/SysUserTokenServiceImpl.java index 0850ed29..3465755c 100644 --- a/src/main/java/com/peanut/modules/sys/service/impl/SysUserTokenServiceImpl.java +++ b/src/main/java/com/peanut/modules/sys/service/impl/SysUserTokenServiceImpl.java @@ -46,15 +46,15 @@ public class SysUserTokenServiceImpl extends ServiceImpl \ No newline at end of file