src/main/java/com/moon/server/controller/sys/TokenController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/interceptor/AuthInterceptor.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/service/sys/ProxyService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/moon/server/service/sys/TokenService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/moon/server/controller/sys/TokenController.java
@@ -79,7 +79,7 @@ } @SysLog() @ApiOperation(value = "插入一条新令牌") @ApiOperation(value = "创建新令牌") @ApiImplicitParams({ @ApiImplicitParam(name = "type", value = "令牌类别:0-临时,1-固定", dataType = "Integer", paramType = "query", example = "1"), @ApiImplicitParam(name = "min", value = "分钟数:默认1个月", dataType = "Integer", paramType = "query", example = "43200") @@ -94,7 +94,14 @@ min = SettingData.TOKEN_EXPIRE; } return success(null); UserEntity ue = tokenService.getCurrentUser(req); TokenEntity te = tokenService.getNewToken(type, min, ue, req); int rows = tokenService.insertToken(te); if (0 == rows) { return fail("创建令牌失败", null); } return success(te); } catch (Exception ex) { return fail(ex, null); } src/main/java/com/moon/server/interceptor/AuthInterceptor.java
@@ -66,7 +66,7 @@ } // 3.获取用户 UserEntity ue = sysService.tokenService.getCurrentUser(request); UserEntity ue = sysService.tokenService.getUserByToken(token); if (ue == null) { return WebHelper.writeStr2Page(response, NO_LOGIN); } @@ -87,9 +87,8 @@ return true; } // 7.检查白名单 // 7.检查白名单和IP一致性 if (!checkWhiteList(ip, request)) { // 检查IP一致性 if (!checkIpSource(ip, token)) { return WebHelper.writeStr2Page(response, ILLEGAL_TOKEN); } @@ -174,11 +173,11 @@ } /** * 检查IP一致性 * 检查IP一致性:固定令牌不检查 */ private boolean checkIpSource(String ip, String token) { TokenEntity te = sysService.tokenService.getEntityByToken(token); return te.getIp().equals(ip); return StaticData.I1 == te.getType() || te.getIp().equals(ip); } } src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -4,6 +4,7 @@ import com.moon.server.entity.all.*; import com.moon.server.entity.sys.ResEntity; import com.moon.server.entity.sys.ResLogEntity; import com.moon.server.entity.sys.TokenEntity; import com.moon.server.entity.sys.UserEntity; import com.moon.server.helper.AsyncHelper; import com.moon.server.helper.HttpHelper; @@ -108,7 +109,7 @@ } // 7.检查白名单和IP一致性 if (!checkWhiteList(ip, req)) { if (!ip.equals(sysService.tokenService.getEntityByToken(token).getIp())) { if (!checkIpSource(ip, token)) { return WebHelper.writeStr2Page(res, AuthInterceptor.ILLEGAL_TOKEN); } } @@ -145,6 +146,15 @@ } /** * 检查IP一致性:固定令牌不检查 */ private boolean checkIpSource(String ip, String token) { TokenEntity te = sysService.tokenService.getEntityByToken(token); return StaticData.I1 == te.getType() || te.getIp().equals(ip); } /** * 检查资源权限 */ private ResEntity getResEntity(UserEntity ue, int resId) { src/main/java/com/moon/server/service/sys/TokenService.java
@@ -23,7 +23,6 @@ * @author sws * @date 2022-09-28 */ @Service public class TokenService implements TokenMapper { @Autowired @@ -121,6 +120,7 @@ @Override public Integer updateTokenExpire(TokenEntity tokenEntity) { clearCache(tokenEntity.getToken()); return tokenMapper.updateTokenExpire(tokenEntity); } @@ -128,11 +128,18 @@ * 获取新的令牌实体类 */ public TokenEntity getNewToken(UserEntity ue, HttpServletRequest req) { return getNewToken(0, SettingData.TOKEN_EXPIRE, ue, req); } /** * 获取新的令牌实体类 */ public TokenEntity getNewToken(Integer type, Integer min, UserEntity ue, HttpServletRequest req) { TokenEntity te = new TokenEntity(); te.setToken(WebHelper.getGuid()); te.setDuration(SettingData.TOKEN_EXPIRE); te.setExpire(WebHelper.getTimestamp(SettingData.TOKEN_EXPIRE)); te.setType(0); te.setDuration(min); te.setExpire(WebHelper.getTimestamp(min)); te.setType(type); te.setIp(WebHelper.getIpAddress(req)); te.setCreateUser(ue.getId()); te.setUname(ue.getUname()); @@ -157,7 +164,7 @@ // db TokenEntity te = selectOneByToken(token); if (te != null) { if (null != te) { redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); return true; } @@ -186,7 +193,7 @@ // db,设置令牌过期 te.setUpdateUser(ue.getId()); Integer rows = updateTokenExpire(te); if (rows == 0) { if (0 == rows) { return false; } @@ -225,7 +232,7 @@ // db TokenEntity te = selectOneByToken(token); if (te != null) { if (null != te) { redisService.put(tokenKey, te, te.getDuration(), TimeUnit.MINUTES); } @@ -265,9 +272,8 @@ return null; } String userKey = RedisCacheKey.signUserKey(token); // redis String userKey = RedisCacheKey.signUserKey(token); Object obj = redisService.get(userKey); if (obj instanceof UserEntity) { return (UserEntity) obj; @@ -275,12 +281,9 @@ // db UserEntity ue = usersService.selectByToken(token); if (ue != null) { TokenEntity te = getEntityByToken(token); if (te != null) { redisService.put(userKey, ue, te.getDuration(), TimeUnit.MINUTES); } } // if (null != ue) { // getEntityByToken(token); // } return ue; } @@ -315,6 +318,6 @@ String key = RedisCacheKey.signPwdError(ue.getUid()); Object objCount = redisService.get(key); return objCount != null && (int) objCount >= SettingData.PWD_ERR_COUNT; return null != objCount && (int) objCount >= SettingData.PWD_ERR_COUNT; } }