springboot整合arcgis代理resource-proxy

springboot整合arcgis代理resource-proxy

1. 没有必要改造为servlet或者controller

之前写了文章,为了让代理能被系统登录验证拦截,所以想办法改为可控制的版本,servlet或者controller,现在发现并不用改造,修改项目配置支持jsp就行了,也能支持前后端分离项目。

2.配置springboot的支持jsp

  1. 依赖中添加tomcat的jsp包
       <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>
  1. build中添加资源文件内容
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/webapp</directory>
                <targetPath>META-INF/resources</targetPath>
                <includes>
                    <include>**/*.*</include>
                </includes>
            </resource>
        </resources>

3. 放入代理配置文件

  1. proxy.config文件放在resource目录下。添加几条测试配置
   <serverUrls>
    <serverUrl url="http://services.arcgisonline.com" matchAll="true"/>
    <serverUrl url="https://services.arcgisonline.com" matchAll="true"/>
    <serverUrl url="http://www.baidu.com" matchAll="true"/>
  </serverUrls>
  1. proxy.jsp文件放在webapp目录下,没有就在resource同级添加一个webapp目录
    在这里插入图片描述

4.测试权限验证

  1. 拦截测试,没有token情况下,是会被拦截的。
    在这里插入图片描述

  2. 添加token后访问正常
    在这里插入图片描述

  3. 访问静态资源
    在这里插入图片描述

5. 解决代理的url转义问题

传入的被代理url地址会出现转义的情况,微服务下可能需要添加如下代码

  • ?被转义成了%3F
    在这里插入图片描述

  • ping类型的没有的路径,后面默认跟了=,此时会报403

在这里插入图片描述

proxy.jsp能处理正确的路径是:

  • ...../proxy.jsp?https%3A%2F%2Fservices.arcgisonline.com%2Farcgis%2Frest%2Fservices%2FWorldElevation3D%2FTerrain3D%2FImageServer%2Ftile%2F0%2F0%2F0%3Fsdfasdf=123
  • ...../proxy.jsp?ping

此路径在微服务服务之间传递路径时会被转义。所以用这样的步骤处理下。

   
    String originalUri = request.getQueryString();
    System.out.println("originalUri = " + originalUri);
    try {
        if (originalUri.contains("%3F")) {
            String str = "";
            String[] strings = originalUri.split("%3F");

            for (int i = 0; i < strings.length; i++) {
                if (i == 0) {
                    strings[i] = URLDecoder.decode(strings[i], "UTF-8");
                }
                if (i == 0) {
                    str += strings[i] + "?";
                } else if (i != strings.length - 1) {
                    str += strings[i] + "%3F";
                } else {
                    str += strings[i];
                }
                //System.out.println("strings["+i+"] = " + strings[i]);
            }
            originalUri = str;

        } else if (originalUri.endsWith("=")) {
            String decode = URLDecoder.decode(originalUri, "UTF-8");
            originalUri = decode.substring(0, decode.length() - 1);

        }
        System.out.println("originalUri decode = " + originalUri);
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }

    _log(Level.INFO, "Creating request for: " + originalUri);

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值