SpringBoot - 解析 HTTP 请求标头时出错(Oauth2 https 端点)

2024-02-24

当我尝试从 Spring Boot 应用程序访问 OAuth HTTPS 端点时,出现以下错误,但 HTTP 端点工作得很好

Error:

2018-07-24 10:25:06.292 [DEBUG] [8464] [https-jsse-nio-8084-exec-8] o.apache.coyote.http11.Http11Processor:解析HTTP请求标头时出错

java.io.EOFException: null 在 org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1250) 在 org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1190) 在 org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:717) 在 org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:366) 在 org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:687) 在 org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 在 org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:790) 在 org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1459) 在 org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 在 org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 在 java.lang.Thread.run(Thread.java:748)

端点

https://localhost:8084/my-auth/oauth/authorize 
https://localhost:8084/my-auth/oauth/token

ssl 的应用程序 YML 配置:

 port: 8084
    non-http-port: 8083
    context-path: /my-auth
    ssl:
      key-alias: <my cert alais>
      key-password: <my pasword>
      key-store: <my jks path>
      key-store-type: JKS
      enabled: true

安全java配置

  @Bean
   public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern(contextPath+"/api/v1/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };

        tomcat.addAdditionalTomcatConnectors(redirectConnector());
        return tomcat;
    }
    private Connector redirectConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        connector.setPort(unSecuredPort);
        connector.setSecure(false);
        connector.setRedirectPort(securedPort);
        return connector;
    }

POM file

    <?xml version="1.0" encoding="UTF-8"?>
<project
    xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>my-app-name</artifactId>
        <groupId>my.group.id</groupId>
        <version>my-version</version>
        <relativePath>../pom.xml</relativePath>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <packaging>jar</packaging>
    <artifactId>my-app-name</artifactId>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-security</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security</groupId>
            <artifactId>spring-security-ldap</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.0.15.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf-spring4</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
        </dependency>
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

这不是错误,而是调试消息。

我也遇到了这个,我相信正确的答案在这里:

如果日志级别不是DEBUG,EOF就会被默默吞掉。不幸的是,该消息显示“Unexpected EOF”,因为在这种情况下这是正常的。

我在上找到的tomcat 抓取站点 http://tomcat.10.x6.nabble.com/Question-on-Http11AprProcessor-Error-parsing-HTTP-request-header-error-messages-td5031194.html

此处的调试消息:

   catch (IOException e) {
       if (log.isDebugEnabled()) {
           log.debug(sm.getString("http11processor.header.parse"), e);
       }
       setErrorState(ErrorState.CLOSE_CONNECTION_NOW, e);
       break;
    }

in Tomcat 8.5 中的 Http11Processor https://github.com/apache/tomcat/blob/8.5.x/java/org/apache/coyote/http11/Http11Processor.java

并为此 Tomcat 修复添加了导致它的 EOFException:非阻塞也应该在 EOF 上抛出 EOFException https://github.com/apache/tomcat/commit/91b78590169c0a6fa3dfc5a7d0818a5c1c630f44

我从这个“问题”的另一个讨论中发现了这个spring-cloud github 讨论 https://github.com/spring-cloud/spring-cloud-dataflow/issues/1306

我认为这是完全正常的OEFException由我们的同事添加阿帕奇/tomcat@91b7859 https://github.com/apache/tomcat/commit/91b78590169c0a6fa3dfc5a7d0818a5c1c630f44。当 ssl 连接到非 ssl 连接器时,INFO 级别上的日志记录错误有点激进。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBoot - 解析 HTTP 请求标头时出错(Oauth2 https 端点) 的相关文章

随机推荐

  • Android - 在 TextView 上显示带边框文本的方法?

    有没有办法在 TextView 上显示带边框的文本 我建议延长TextView http developer android com reference android widget TextView html See Android 自定
  • 如何在 MacBook Air 上的 iOS 模拟器中滚动?

    我有一个滚动视图和一个嵌入的 UIImageView 代码是正确的 但我无法在模拟器中滚动 可能是因为我有触控板 而不是鼠标 或者我可以吗 您需要启用 3 指拖动 从 Apple 菜单中选择 系统偏好设置 单击辅助功能图标 在侧边栏中选择
  • 如何禁用 openssl 中的特定密码套件?

    我想保护我的服务器免受 FREAK 攻击 因此我想禁用所有使用 Openssl 导出级 RSA 密钥的密码套件 有没有办法禁用 openssl 中的特定密码套件 如果是 我该怎么做 有没有办法禁用 openssl 中的特定密码套件 如果是
  • 内存限制=80M。 imagecreatefromjpeg() 的最大图像尺寸是多少?

    我有一个虚拟主机 最大内存限制为 80M 即 ini set memory limit 80M 我正在使用使用函数 imagecreatefromjpeg 的照片上传 当我上传大图片时出现错误 致命错误 允许的内存大小 83886080 字
  • 使用 then() 使函数在节点中顺序运行

    我想在序列总线中运行循环函数 该函数总是异步的 有什么方法可以使其同步而不使用回调或任何外部库 file 1 var db require promiseUnderStanding var fun function for var i 0
  • 如何求两个表的总和?

    我有两个表 第一个名称是 销售 第二个名称是 项目 两个表中都有相同的 code 和 qtd 列 我想编写 MYSQL 查询 我需要两个表中的 sum qtd 其中两个表中的代码相同 对于单表 我正在使用这个 按代码从销售组中选择代码 su
  • FORTRAN 95:是否可以在不共享源代码的情况下共享模块?

    我希望能够共享 FORTRAN 95 模块而不共享其源代码 是否可以这样做 也许通过共享 MOD 文件 如果这是相关的 我在 Plato 上使用 Silverfrost FTN95 编译器 到目前为止 我只能通过使用外部模块的源代码来完成这
  • 为什么 _mm_mulhrs_epi16() 总是进行有偏舍入到正无穷大?

    有谁知道为什么pmulhrsw指示或 mm mulhrs epi16 x RoundDown x y 16384 32768 总是向正无穷大舍入 对我来说 这对负数有很大的偏差 因为像 0 6 0 6 0 6 0 6 这样的序列平均起来不会
  • C++ 矢量 和套接字

    有没有办法调用 send recv 传递向量 在 C 中缓冲套接字数据的好习惯是什么 例如 读取直到 r n 或直到 upper bound 4096 字节 std vector
  • Rails错误resource_name - devise帮助路由和渲染

    我正在尝试渲染 Devise gem 的登录视图 但出现错误 下面是我当前拥有的代码 这是我的views users shared links html erb br br
  • C# SerialPort.IsOpen 在物理断开连接时返回 true

    当物理断开 USB 端口上的串行电缆时 C SerialPort IsOpen 返回 true 任何人都可以帮助我如何克服这个问题 这不是串行端口的工作方式 它们没有像 TCP 这样的标准面向连接的协议 IsOpen 名称的选择并非偶然 它
  • 为什么我的反应本机组件重叠

    我想将 2 个组件放置在彼此下方 我的组件如下所示 import React from react import connect from react redux import Text StyleSheet View ListView S
  • WPF:删除样式列表框中焦点项目周围的虚线边框

    我有一个带有自定义 controlIemplate 的水平列表框 选定的项目在聚焦时会出现一个虚线框 有人知道如何摆脱它吗 您需要将每个 ListBoxItem 的 FocusVisualStyle 设置为 null 步骤如下 1 为Lis
  • Keras:可视化 ImageDataGenerator 输出

    我想看看我的 ImageDataGenerator 为我的网络带来了什么 Edit 删除了channel shift range 不小心将其留在了代码中 发电机 genNorm ImageDataGenerator rotation ran
  • 在Java中将位图图像转换为未压缩的tif图像

    我正在尝试将位图图像转换为未压缩的 tif 文件 以便与 Tesseract OCR 引擎一起使用 我可以使用这种方法来生成压缩的tif文件 final BufferedImage bmp ImageIO read new File inp
  • 将 ereg_replace 转换为 preg_replace

    我必须转换一个ereg replace to preg replace ereg replace 代码是 ereg replace 0 9 36 1 value 由于 preg 由开始和结束反斜杠表示 我假设转换为 preg replace
  • JQuery Mobile 在 Android 上看到黑色覆盖块

    我当前创建了一个使用 JQueryMobile 和 Phonegap 构建的示例应用程序 它是一个简单的应用程序 没有什么特别的 它旨在在 Android 平台上运行 适用于手机和平板电脑 我的应用程序上有一个页面 显示一个带有黑色 透明背
  • 使用jquery更改rgba alpha透明度[重复]

    这个问题在这里已经有答案了 可能的重复 jQuery RGBA 颜色动画 https stackoverflow com questions 3242368 jquery rgba color animations hey 我想更改悬停时
  • 我应该用 ; 结束表达式吗?在循环内?

    我刚开始学习 Rust 经常有一些找不到答案的问题 我真的不知道如何以及在哪里发布我的问题 所以我会尝试这样做 我开始阅读网站上的 Rust 文档 并做了猜谜游戏示例 我意识到match cmp循环内的表达式可以变成语句 并且一切仍然有效
  • SpringBoot - 解析 HTTP 请求标头时出错(Oauth2 https 端点)

    当我尝试从 Spring Boot 应用程序访问 OAuth HTTPS 端点时 出现以下错误 但 HTTP 端点工作得很好 Error 2018 07 24 10 25 06 292 DEBUG 8464 https jsse nio 8