月球大数据地理空间分析展示平台-【后端】-月球后台服务
1
13693261870
2023-07-11 8ad94ef58f7dc61cc97b9e6c084b9efaa8eee4db
1
已重命名1个文件
已添加1个文件
157 ■■■■ 文件已修改
src/main/java/com/moon/server/controller/sys/ProxyController.java 48 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/service/sys/ProxyService.java 109 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/moon/server/controller/sys/ProxyController.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,48 @@
package com.moon.server.controller.sys;
import com.moon.server.helper.WebHelper;
import com.moon.server.service.sys.ProxyService;
import com.sun.istack.NotNull;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
 * ä»£ç†æœåŠ¡
 * @author WWW
 * @date 2023-07-11
 */
@Api(tags = "运维管理\\代理服务")
@RestController
@RequestMapping("/proxy")
public class ProxyController {
    @Resource
    ProxyService proxyService;
    private static final Log log = LogFactory.getLog(ProxyController.class);
    @ApiOperation(value = "URL代理", notes = "URL代理")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "token", value = "令牌", dataType = "String", paramType = "path", required = true, example = "1eb2ea8f-5cfd-4e6c-95c9-17ab0f7bce71"),
            @ApiImplicitParam(name = "id", value = "ID", dataType = "int", paramType = "path", required = true, example = "1"),
    })
    @RequestMapping(value = {"/{token}/{id}/**"})
    public void proxyUrl(@NotNull @PathVariable String token, @NotNull @PathVariable int id, HttpServletRequest req, HttpServletResponse res) {
        try {
            proxyService.proxyUrl(token, id, req, res);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
            WebHelper.writeStr2Page(res, ex.getMessage());
        }
    }
}
src/main/java/com/moon/server/service/sys/ProxyService.java
ÎļþÃû´Ó src/main/java/com/moon/server/interceptor/ProxyFilter.java ÐÞ¸Ä
@@ -1,4 +1,4 @@
package com.moon.server.interceptor;
package com.moon.server.service.sys;
import com.alibaba.fastjson.JSON;
import com.moon.server.entity.all.HttpStatus;
@@ -12,27 +12,25 @@
import com.moon.server.helper.HttpHelper;
import com.moon.server.helper.StringHelper;
import com.moon.server.helper.WebHelper;
import com.moon.server.interceptor.AuthInterceptor;
import com.moon.server.service.all.PermsService;
import com.moon.server.service.all.SysService;
import com.moon.server.service.sys.ResLogService;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.TimerTask;
/**
 * ä»£ç†è¿‡æ»¤å™¨
 * ä»£ç†æœåŠ¡ç±»
 * @author WWW
 * @date 2023-07-04
 * @date 2023-07-11
 */
@WebFilter(urlPatterns = {"/proxy/*"})
public class ProxyFilter implements Filter {
@Service
public class ProxyService {
    @Resource
    private SysService sysService;
@@ -42,60 +40,29 @@
    @Resource
    private ResLogService resLogService;
    private final static int LEN = "/proxy/".length();
    private static final Log log = LogFactory.getLog(ProxyFilter.class);
    public static final String ILLEGAL_RESOURCE = JSON.toJSONString(new ResponseMsg<String>(HttpStatus.UNAUTHORIZED, "没有资源访问权限"));
    @Override
    public void init(FilterConfig filterConfig) {
    }
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
        try {
            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;
            // 2.获取令牌
            String token = getToken(req);
            // 3.获取用户
            UserEntity ue = getUser(res, token);
            if (null == ue) {
                return;
            }
            int resId = getResId(req.getRequestURI(), LEN + token.length() + 1);
            if (!check(req, res, ue, token)) {
                return;
            }
            // 9.获取资源实体
            ResEntity entity = getResEntity(ue, resId);
            if (null == entity) {
                WebHelper.writeStr2Page(res, ILLEGAL_RESOURCE);
                return;
            }
            insertLog(req, ue, resId);
            String url = getSourceUrl(req, entity);
            proxy(req, res, url);
        } catch (Exception ex) {
            log.error(ex.getMessage(), ex);
        }
    }
    @Override
    public void destroy() {
    }
    /**
     * èŽ·å–ä»¤ç‰Œ
     * URL代理
     */
    private String getToken(HttpServletRequest req) {
        return req.getRequestURI().substring(LEN, req.getRequestURI().indexOf("/", LEN));
    public void proxyUrl(String token, int resId, HttpServletRequest req, HttpServletResponse res) throws Exception {
        // 3.获取用户
        UserEntity ue = getUser(res, token);
        if (null == ue) {
            return;
        }
        // 9.获取资源实体
        ResEntity entity = getResEntity(ue, resId);
        if (null == entity) {
            WebHelper.writeStr2Page(res, ILLEGAL_RESOURCE);
            return;
        }
        insertLog(req, ue, resId);
        String url = getSourceUrl(req, entity, token);
        forward(req, res, url);
    }
    /**
@@ -109,16 +76,6 @@
        }
        return ue;
    }
    /**
     * èŽ·å–èµ„æºID
     */
    private int getResId(String uri, int start) {
        int end = uri.indexOf("/", start);
        String str = -1 == end ? uri.substring(start) : uri.substring(start, end);
        return Integer.parseInt(str);
    }
    /**
@@ -203,7 +160,7 @@
            return null;
        }
        // List<ResEntity> list = rs.stream().filter(resEntity -> resEntity.getId() == resId).collect(Collectors.toList());
        // List<ResEntity> list = rs.stream().filter(resEntity -> resEntity.getId() == resId).collect(Collectors.toList())
        for (ResEntity entity : rs) {
            if (resId == entity.getId()) {
                return entity;
@@ -265,15 +222,17 @@
    /**
     * èŽ·å–åŽŸå§‹Url
     */
    private String getSourceUrl(HttpServletRequest req, ResEntity entity) {
    private String getSourceUrl(HttpServletRequest req, ResEntity entity, String token) {
        String proxyUrl = entity.getProxy().replace("{token}", token);
        int end = req.getRequestURL().indexOf(proxyUrl) + proxyUrl.length();
        return "";
        return entity.getUrl() + req.getRequestURL().substring(end);
    }
    /**
     * ä»£ç†æœåŠ¡
     * è½¬å‘请求
     */
    private void proxy(HttpServletRequest request, HttpServletResponse response, String url) throws Exception {
    private void forward(HttpServletRequest request, HttpServletResponse response, String url) throws Exception {
        HttpHelper httpHelper = new HttpHelper();
        httpHelper.service(request, response, url, null);
    }