From f7b2d885bc64a0598facb2b5a0d89dcdf5921902 Mon Sep 17 00:00:00 2001 From: 13693261870 <252740454@qq.com> Date: 星期三, 27 九月 2023 16:26:11 +0800 Subject: [PATCH] 修改代理服务-3 --- src/main/java/com/moon/server/mapper/all/PermsMapper.java | 15 +++++++ src/main/resources/mapper/all/PermsMapper.xml | 25 ++++++++++++ src/main/java/com/moon/server/service/sys/ProxyService.java | 33 +++++++++++++++- src/main/java/com/moon/server/entity/all/RedisCacheKey.java | 7 +++ src/main/java/com/moon/server/service/all/PermsService.java | 35 ++++++++++++++++- src/main/java/com/moon/server/helper/HttpHelper.java | 3 - 6 files changed, 109 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/moon/server/entity/all/RedisCacheKey.java b/src/main/java/com/moon/server/entity/all/RedisCacheKey.java index af80a99..a0384df 100644 --- a/src/main/java/com/moon/server/entity/all/RedisCacheKey.java +++ b/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) { diff --git a/src/main/java/com/moon/server/helper/HttpHelper.java b/src/main/java/com/moon/server/helper/HttpHelper.java index 6d621d0..19d8eff 100644 --- a/src/main/java/com/moon/server/helper/HttpHelper.java +++ b/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())) { // } diff --git a/src/main/java/com/moon/server/mapper/all/PermsMapper.java b/src/main/java/com/moon/server/mapper/all/PermsMapper.java index cfeb1a1..d1d6117 100644 --- a/src/main/java/com/moon/server/mapper/all/PermsMapper.java +++ b/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); + + /** + * 鏌ヨ鎵�鏈塆eoServer鐨勫浘灞傚悕 + * + * @return + */ + public List<String> selectAllTabs(); + + /** * 鏍规嵁鐢ㄦ埛Uid鏌ヨ鑿滃崟鎺堟潈 * * @param uid diff --git a/src/main/java/com/moon/server/service/all/PermsService.java b/src/main/java/com/moon/server/service/all/PermsService.java index 7601c86..c22b7ec 100644 --- a/src/main/java/com/moon/server/service/all/PermsService.java +++ b/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 diff --git a/src/main/java/com/moon/server/service/sys/ProxyService.java b/src/main/java/com/moon/server/service/sys/ProxyService.java index 4b14343..b6c8770 100644 --- a/src/main/java/com/moon/server/service/sys/ProxyService.java +++ b/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 { diff --git a/src/main/resources/mapper/all/PermsMapper.xml b/src/main/resources/mapper/all/PermsMapper.xml index 6b1626d..bf43f36 100644 --- a/src/main/resources/mapper/all/PermsMapper.xml +++ b/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 -- Gitblit v1.9.3