月球大数据地理空间分析展示平台-【后端】-月球后台服务
13693261870
2023-10-08 495253345194da937f134cfb2adb9eaf00c413d5
修改令牌的IP检查功能
已修改4个文件
67 ■■■■■ 文件已修改
src/main/java/com/moon/server/controller/sys/TokenController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/interceptor/AuthInterceptor.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/sys/ProxyService.java 12 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/sys/TokenService.java 35 ●●●● 补丁 | 查看 | 原始文档 | 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;
    }
}