如何防止“无缘无故”获得java.lang.illegalargumentexception?

q35jwt9p  于 2021-07-08  发布在  Java
关注(0)|答案(2)|浏览(516)

我在做一个spring boot项目。
我在办公室有时间的时候开发,所以从周一到周五,从早上8点到下午4点。
当我使用,测试它有时8小时长,一切正常。但通常每天晚上都有一次 Exception 没有任何动作(我完全远离键盘):

o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header
Note: further occurrences of HTTP header parsing errors will be logged at DEBUG level.

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:422) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:683) ~[tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1457) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_272]
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8.0_272]
        at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) [tomcat-embed-core-8.5.20.jar!/:8.5.20]
        at java.lang.Thread.run(Thread.java:748) [na:1.8.0_272]

我在stackoverflow中搜索过它,在许多线程中都找到了:
“尝试在未启用https的终结点上执行来自客户端的https请求时,可能会发生此异常。”
我根本不使用ssl,我只通过http://localhost:端口或http://ip:端口。
那么,这个神秘的https请求会是什么,我如何才能防止得到这个异常呢?

z6psavjg

z6psavjg1#

java.lang.IllegalArgumentException: Invalid character found in method name. HTTP method names must be tokens
        at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:422)

这表示正在处理http请求。如果您查看http11inputbuffer的源代码,您将看到它正在尝试处理请求短语2,即下面示例中突出显示的部分。例如“get/wiki/hoofdpagina http/1.1”
因此,肯定会用一个可能无法解析的请求url调用您的服务器。假设您的服务器受到攻击,例如,可能是路径遍历尝试。设置调试日志,以便查看更多信息。有关请求来源的更多信息。

nzkunb0c

nzkunb0c2#

“无缘无故”
总有原因的。这是一台电脑,它没有能力只跟你说话。
你还没有详细说明你的设置。最有可能的是,这个盒子可以通过某种方式从外部世界访问,一些portscanner之类的东西正在影响你的服务。这就是当你把东西放到公共互联网上时发生的事情。
您可能需要使用防火墙或更改某些配置,以确保此服务器不可公开访问。
如果你真的希望它是可访问的,那么正确的做法不是压制这些东西,而是确保它是去正确的地方。一些日志文件,以便您可以回顾,做分析,如果发生安全问题,您可以回顾,等等。

相关问题