问题标签 [undertow]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3156 浏览

spring-mvc - Spring Boot Undertow 在同一个应用程序中添加阻塞处理程序和 NIO 处理程序

在我之前的问题(感谢@Andy Wilkinson)中,我发现所有传入的请求undertowEmbeddedServletContainer都由工作线程处理(阻塞操作)。

根据安迪的说法,我尝试添加一个UndertowBuilderCustomizer以覆盖ServletInitializerHandler以使用非阻塞处理程序处理传入请求。

在这个定制器中,我rootHandler为 NIO 处理程序设置了构建器。UndertowEmbeddedServletContainer但它在启动阶段被覆盖ServletInitializerHandler

正如这个问题的标题所说:我试图同时拥有阻塞和非阻塞处理程序,其中阻塞处理程序通过@Controller注释管理,而 NIO 处理程序由 Sp​​ring 管理。

我找到了一个解决方案,但是作为一个初学者,我不知道它是否是一个好的解决方案。

HandlerPath注解

创建实现 HttpHandler 的 bean

创建一个简单的控制器

创建一个实现 ServletExtension 的类

在这个方法中,默认ServletInitializerhandler绑定到“/”上下文,由spring管理,所以所有阻塞请求都可以由@Controller(s)来处理。然后我尝试发现所有用 注释的 bean ,然后在based on属性中@HandlerPath添加一个新的。prefixPathrootHandler@HandlerPath.path

最后

创建目录 META-INF.services

创建一个文件 io.undertow.servlet.ServletExtension 并添加行:

结果

一切都像魅力一样工作,当绑定 URL 被命中时调用 NIO 处理程序,阻塞处理程序也是如此。

谁能告诉我这个解决方案是否可以以任何方式改进?此外,由于 NIO 处理程序 URL 不是由 Spring 管理的,我想我必须使用globaleMethodSecurity并设置@PreAuthorize来保护 NIO 处理程序?

0 投票
1 回答
4095 浏览

spring - 如何为 Spring Boot/MVC 资源设置可识别的内容/MIME 类型?

使用Spring MVC 的 ResourceHandler很容易提供资源。

但是,有些文件,即.ico文件无法正确识别,它们没有得到正确的Content-Type标题。似乎这是由以下人员处理的ResourceHttpRequestHandler

那么如何在 Spring Boot 1.2 中配置可识别的文件扩展名/MIME 类型呢?(对于 Tomcat 和 Undertow)

0 投票
1 回答
1576 浏览

java - 什么时候以及为什么我必须使用 Spring Boot?

我什么时候以及为什么要参加 Spring Boot?

  1. 根据我到目前为止的阅读,它可以帮助我非常快速地启动基于弹簧的应用程序,我不必坐下来创建大量 xml 配置,处理多个依赖项、jars..etc。相反,Spring Boot 为我完成了这项工作,让我只专注于我的功能并编写代码。

  2. 此外,当我使用 Spring Boot 运行我的应用程序(打包为 JAR)时,它可以使用嵌入式 Tomcat 服务器运行,也可以使用 Undertow 运行,而不是部署在常规服务器容器中

  3. 通过使用 Spring Boot 平台开发的应用程序立即提供健康监控、线程监控等功能(?)

问题#1 我的理解正确吗?问题#2 还有其他优点或原因,我应该选择 Spring Boot 吗?问题#3 是否有任何其他等效的引导库/框架用于 spring 或其他类似的 java 技术?问题#4 Spring Roo 会被 Spring Boot 取代吗?

关于第 2 点 - 这种方法有多稳定、安全、高性能?它是仅在测试期间适用还是在典型的生产场景中也可用?

0 投票
1 回答
1006 浏览

spring - 在 Undertow 中部署基于 Spring 的 Web 应用

我正在尝试将我们基于 Spring 的 Web 应用程序从 Tomcat 8 迁移到 Undertow。

我们使用 Spring 的 WebApplicationInitializer 进行 Spring-MVC 和 HibernateTransactionManager 的编程配置。

有一个ServletContainerInitializerInfo(Javadoc)似乎可以满足我的目的,例如我可以实例化它,然后按照 Undertow 文档(链接)中给出的步骤启动服务器:

问题是我不知道在调用构造函数时用什么代替instanceFactory和参数。此外,方法的名称拼写错误(应该是 Initializer 而不是 Initalizer)。handlesTypesServletcontainerInitializerInfoaddServletContainerInitalizer

有人可以帮忙吗?

谢谢!

0 投票
1 回答
424 浏览

networking - Undertow 服务器通过 wifi 联网

我有两到三个系统,比如说系统 A、B、C,它们连接到三个系统中的任何一个上的无线热点

在系统 A 上,我正在运行服务器,我可以在浏览器或应用程序中通过“localhost:8080”访问系统 A。我希望系统 B、C 也能够使用特定 IP 地址访问服务,不一定是“localhost:8080”。我的意思是我希望系统 B 和 C 上的互联网浏览器或应用程序能够访问系统 A 上的 undertow 服务器提供的相同服务。

0 投票
2 回答
9092 浏览

java - 在 Undertow 中启用 HTTPS

我们有一个有效的 Apache mod_ssl 配置。我想为 Undertow 启用 HTTPS 支持,以便它同时侦听 http 和 https,从而消除对 Apache 的需求。

我查看了 Undertow 的 javadocs。Undertow.Builder 类有两个带有以下签名的 addHttpsListener 方法:

所以似乎我可以在使用 Builder API 引导 Undertow 时使用这些,例如

我不确定如何创建 SSLContext 变量,或者如何配置 KeyManagers 和 TrustManagers。有了 mod_ssl 正在使用的证书文件,我该如何继续为 Undertow 启用 HTTPS?

更新:

根据 hwellmann 的回答,我重用了SslContextFactory.createSslContext()方法。在此之前,我必须将我的公钥/私钥对转换为 PKCS12 格式并将其导入 Java 密钥库。

给出下面的 SSL 转换转换/导入命令(取自此处此处),希望这些对任何人都有用:

0 投票
0 回答
47 浏览

undertow - 属性的文本表示

查看Predicates, Attributes and Handlers的 Undertown 文档,似乎可以通过某种方式获得属性的文本表示,例如:

您好 %u 请求方法是 %m(从文档中提取的示例,其中 %u 是远程用户,%m 是方法)。

我的意图是使用它们来记录请求时间或记录其他跟踪/调试方法。

我该如何使用它们?是否有任何提供的处理程序可以记录具有插值属性的字符串?

0 投票
1 回答
2539 浏览

https - 在 Undertow 中将 HTTP 重定向到 HTTPS

如何在 Undertow 中配置 HTTP->HTTPS 重定向?我查看了 Undertow 的代码库,有些类似乎是相关的(例如 RedirectHandler)。此外,Undertow 文档(Predicates Attributes and Handlers)似乎正是针对这个问题。但我不知道从哪里开始。

基本上,我正在寻找的是 Apache 的 mod_rewrite 配置的一些对应物:

谢谢!

0 投票
0 回答
93 浏览

java - 在 servlet builder 中添加更多 servlet

我有这个添加 servlet 的代码和 url

但是,我尝试使用此版本,但无法正常工作

这不起作用,因为后者 servlet(url) 部分正在工作,而前者却没有。我的意思是 myservlet1 正在工作,而 myservlet 不再工作

0 投票
2 回答
1141 浏览

undertow - undertow 多个 web 服务 url

我想在我的地址上有这样的东西。我如何将 servlet1、servlet2、servlet3 绑定到 localhost:8080,这样我就可以有不同的 url 来调用,例如

本地主机:8080/servlet

本地主机:8080/servlet1

本地主机:8080/servlet2

本地主机:8080/servlet3

我有这段代码只适用于添加的最后一个 url(servlet)