有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

JavaWeb服务在本地机器上保持编码,在开发时转换

我有一个奇怪的问题,我希望有人有一些经验,可以帮助我

我在我的计算机上安装了一个tomcat,当我需要的时候,我用它在本地运行东西,但之后我会将它发布到一个开发框中进行测试。但是,URL编码的行为有所不同

例如,HTTP动词如下所示(在postman中,删除了URL的其余部分)

DELETE   .../AAASnsAATAALI%2F5AAK/20181114110451

在本地计算机上,我在localhost\u access\u日志中看到:

"DELETE ../AAASnsAATAALI%2F5AAK/20181114110451 HTTP/1.1" 400

(我期待400。我已经了解了org.apache.tomcat.util.buf.udeconder.ALLOW_ENCODED_SLASH=true,我需要设置它,这要感谢StackOverflow,当我这样做时,一切都很好)

但是,我在开发机器上的localhost\u access\u日志中看到了这一点:

 "DELETE ../AAASnsAATAALI/5AAK/20181114110451 HTTP/1.1" 404 1008

当然,我得到的是404,因为某些东西正在将%2F转换为/导致我的URL路径出错

我不清楚我的机器和开发机器之间有什么不同。我不认为这可能是tomcat,因为我非常确定我只是有现成的安装(我比较了我的catalina.properties,它们是相同的)。这可能是IIS中的某些东西导致开发框出现这种情况吗?我对这件事挠头已经有一段时间了,所以我希望有人让这件事发生在他们身上

感谢您的指导

编辑:

我最近发现,如果我直接引用tomcat而不是使用提供的intranet URL进行服务调用,我会得到预期的400错误。因此,我觉得必须为内联网站点设置一个需要更改的设置。我现在正在经历它,但没有经验


共 (1) 个答案

  1. # 1 楼答案

    因此,如果有人遇到这种情况,我可以通过多次尝试和错误找到解决方案

    首先,这是一个与IIS相关的问题。我没有足够的经验来回答特定的问题,但如果有任何问题出现,我可以尽我所能

    我相信这可能是一场灾难。NET 4.5(可能是4.0)问题,我们在作出此响应时使用的是4.7。所以我听说他们在4.5版本中对URL的要求要严格得多。默认情况下,IIS将解码编码的URL

    需要做的第一件事是在IIS管理器中安装URL重写模块(或者有必要的资金知道编辑站点的web.config的语法)。我们没有这个,但我能找到一个能戴上它的人。需要将新规则添加到此模块中。我已经包括了网络。对我有效的规则的配置结果:

    <rewrite>
        <rules>
            <rule name="Keep Original Encoded URL String" stopProcessing="true">
                <match url="(.*)" />
                <conditions>
                    <add input="{UNENCODED_URL}" pattern="(.*)" />
                </conditions>
                <action type="Rewrite" url="{C:0}" />
            </rule>
        </rules>
    </rewrite>
    

    基本上,这是说获取URL并返回未编码的URL

    然而,这一切并没有结束。在输入该规则后尝试后,我收到以下错误:

    A potentially dangerous Request.Path value was detected from the client (%) rewrite.
    

    在4.0中,URL有默认的无效字符

    < > * % & : \ ?
    

    因此,为了允许包含%,您必须通过设置requestPathInvalidCharacters并删除%来覆盖此默认设置,这就是我现在所拥有的

    <system.web>
        <httpRuntime requestPathInvalidCharacters="<,>,*,&,:,\,?" />
    </system.web>
    

    一旦这样做了,我就能够得到我所期望的400个错误请求。为了解决这个问题,你把它放在你的catalina里。属性文件

    org.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true
    

    这个解决方案对我有效。如果有人看到他们的问题,请让我知道,这样我可以解决他们。希望这个解决方案能对其他可能有问题的人起作用