月球大数据地理空间分析展示平台-【后端】-月球后台服务
13693261870
2023-09-27 f7b2d885bc64a0598facb2b5a0d89dcdf5921902
修改代理服务-3
已修改6个文件
118 ■■■■■ 文件已修改
src/main/java/com/moon/server/entity/all/RedisCacheKey.java 7 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/helper/HttpHelper.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/mapper/all/PermsMapper.java 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/all/PermsService.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/sys/ProxyService.java 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/mapper/all/PermsMapper.xml 25 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/entity/all/RedisCacheKey.java
@@ -41,6 +41,13 @@
    }
    /**
     * GeoServer的图层名键
     */
    public static String permsGeoTabKey(String key) {
        return "perms:geo:tab:" + key;
    }
    /**
     * 图层授权键
     */
    public static String permsLayerKey(String key) {
src/main/java/com/moon/server/helper/HttpHelper.java
@@ -69,7 +69,6 @@
        CloseableHttpClient client = null;
        HttpResponse proxyResponse = null;
        try {
            client = this.createHttpClient();
            proxyResponse = client.execute(host, proxyRequest);
@@ -287,7 +286,7 @@
    }
    private void copeGeoService(HttpResponse proxyResponse, HttpServletRequest request, HttpServletResponse response, ResEntity res) throws IOException {
        if (StaticData.GET_CAPABILITIES.equals(request.getParameter(StaticData.REQUEST))) {
        if (StaticData.GET_CAPABILITIES.equals(res.getBak())) {
            //
        }
src/main/java/com/moon/server/mapper/all/PermsMapper.java
@@ -32,6 +32,21 @@
    public List<ResEntity> selectAllRes();
    /**
     * 根据用户Uid查询GeoServer的图层名
     *
     * @param uid
     * @return
     */
    public List<String> selectTabs(String uid);
    /**
     * 查询所有GeoServer的图层名
     *
     * @return
     */
    public List<String> selectAllTabs();
    /**
     * 根据用户Uid查询菜单授权
     *
     * @param uid
src/main/java/com/moon/server/service/all/PermsService.java
@@ -24,13 +24,22 @@
    @Override
    public List<ResEntity> selectRes(String uid) {
        return selectResByUid(uid, false);
    }
    @Override
    public List<ResEntity> selectAllRes() {
        return selectResByUid(StaticData.ADMIN, true);
    }
    private List<ResEntity> selectResByUid(String uid, boolean isAll) {
        String key = RedisCacheKey.permsResKey(uid);
        Object obj = redisService.get(key);
        if (obj instanceof List<?>) {
            return (List<ResEntity>) obj;
        }
        List<ResEntity> list = permsMapper.selectRes(uid);
        List<ResEntity> list = isAll ? permsMapper.selectAllRes() : permsMapper.selectRes(uid);
        if (list != null && list.size() > 0) {
            redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
        }
@@ -39,8 +48,28 @@
    }
    @Override
    public List<ResEntity> selectAllRes() {
        return permsMapper.selectAllRes();
    public List<String> selectTabs(String uid) {
        return selectTabsByUid(uid, false);
    }
    @Override
    public List<String> selectAllTabs() {
        return selectTabsByUid(StaticData.ADMIN, true);
    }
    private List<String> selectTabsByUid(String uid, boolean isAll) {
        String key = RedisCacheKey.permsGeoTabKey(uid);
        Object obj = redisService.get(key);
        if (obj instanceof List<?>) {
            return (List<String>) obj;
        }
        List<String> list = isAll ? permsMapper.selectAllTabs() : permsMapper.selectTabs(uid);
        if (list != null && list.size() > 0) {
            redisService.put(key, list, SettingData.CACHE_EXPIRE, TimeUnit.MINUTES);
        }
        return list;
    }
    @Override
src/main/java/com/moon/server/service/sys/ProxyService.java
@@ -245,15 +245,42 @@
            return url;
        }
        String str = req.getQueryString();
        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST))) {
            //
        String str = req.getQueryString(), layers = req.getParameter("layers");
        if (!StaticData.GET_CAPABILITIES.equals(req.getParameter(StaticData.REQUEST)) && null != layers) {
            int start = str.indexOf("layers");
            int end = str.indexOf("&", start);
            layers = filterGeoLayers(ue, layers);
            str = str.replace(str.substring(start, end > -1 ? end : str.length()), "layers=" + layers);
        } else {
            entity.setBak(StaticData.GET_CAPABILITIES);
        }
        return url + (url.contains("?") ? "&" : "?") + str;
    }
    /**
     * 过滤GeoServer图层
     */
    private String filterGeoLayers(UserEntity ue, String layers) {
        List<String> tabs = StaticData.ADMIN.equals(ue.getUid()) ? permsService.selectAllTabs() : permsService.selectTabs(ue.getUid());
        if (null == tabs || tabs.isEmpty()) {
            return "";
        }
        StringBuilder sb = new StringBuilder();
        String[] strs = layers.split(StaticData.COMMA);
        for (String str : strs) {
            if (tabs.contains(str)) {
                sb.append(str).append(",");
            }
        }
        sb.deleteCharAt(sb.length() - 1);
        return sb.toString();
    }
    /**
     * 转发请求
     */
    private void forward(HttpServletRequest request, HttpServletResponse response, ResEntity entity, String url) throws Exception {
src/main/resources/mapper/all/PermsMapper.xml
@@ -18,12 +18,35 @@
    </select>
    <select id="selectAllRes" resultType="com.moon.server.entity.sys.ResEntity">
        select distinct e.*
        select e.*
        from lf.sys_res e
        where e.status between 1 and 2
        order by e.id;
    </select>
    <select id="selectTabs" resultType="java.lang.String">
        select distinct e.tab
        from lf.sys_user a
        inner join lf.sys_role_user b on a.id = b.userid
        inner join lf.sys_role_layer c on b.roleid = c.roleid
        inner join lf.sys_layer d on c.layerid = d.id
        inner join lf.sys_res e on d.resid = e.id
        <where>
            d.status between 1 and 2 and e.status between 1 and 2 and e.category = 2 and length(e.tab) > 0
            <if test="uid != null">
                and a.uid = #{uid}
            </if>
        </where>
        order by e.id;
    </select>
    <select id="selectAllTabs" resultType="java.lang.String">
        select e.tab
        from lf.sys_res e
        where e.status between 1 and 2 and category = 2 and length(e.tab) > 0
        order by e.id;
    </select>
    <select id="selectMenus" resultType="com.moon.server.entity.all.MenusAuthEntity">
        select distinct e.id,e.pid,e.cn_name,e.en_name,e.url,e.perms,e.type,e.css,e.icon,e.level,e.order_num,e.is_show
        from lf.sys_user a