Vaadin 23无法解析URL,而是显示错误页面。

3

问题概要:我们将具有多个模块的Java 17单体应用程序从Vaadin 21.0.1升级到23.3.5,现在我们的应用程序路由无法解析,而是导致404 Whitelabel错误页面。

我们采取的步骤,每个步骤都已经过单独验证:

  • 升级我们的后端以使用Spring 5.3.18(来自5.3.10)。没有问题
  • 升级我们的前端以使用Spring Boot 2.6.7(来自2.5.4)。没有问题
  • 此步骤是项目特定的,不在指南中从pom.xml中删除Vaadin-addons。还从package.json中删除了这些导入。当然,从应用程序中删除了所有插件代码(EnhancedDialog和MultiselectComboBox->使用v23的常规Dialog和MultiSelectComboBox)
  • 删除webpack.config.js、package-lock.json和node_modules文件夹
  • 将全局(-g)npm版本提高到9.4.0(来自8.3.3)
  • 使用命令行清除npm npm cache clear --force
  • 将Vaadin流版本升级到23.3.5(来自21.0.1)
  • 添加以下依赖项并重新加载pom.xml:
<dependency>
    <groupId>com.vaadin</groupId>
    <artifactId>flow-maven-plugin</artifactId>
    <version>23.3.3</version>
</dependency>
  • 无效并重新启动IntelliJ
  • 通过IntelliJ运行clean-install Maven命令(开/关Production标志无差别)

-> 这导致404白标签错误页面。

接下来,我确保我们所有使用com.vaadin.flow.router.@Route注释的视图至少包含javax.annotation.security.@PermitAll注释。 我在我们的application.properties中添加了spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.web.servlet.error.ErrorMvcAutoConfiguration,试图获得更详细的消息。

-> 这导致Apache Tomcat错误页面,其中描述为:“起始服务器未找到目标资源的当前表示形式,或者不愿透露存在该资源。” 在这两种情况下,F12 DevTools为空,并且仅显示给定URL的404。

因此,我继续调试并验证了我们的自定义安全角色是否正确验证,有点像答案所提示的那样。 我进入了WebSecurityConfigurerAdapter的configure(HttpSecurity http)方法中放置的断点,但我无法进入VaadinServiceInitListener的serviceInit(ServiceInitEvent event)。 对于servletRequests,我不是专业人士,但当点击适配器配置期间调用的isFrameworkInternalRequest(HttpServletRequest request)时,似乎只有当REQUEST_TYPE_PARAMETER的值为null时才是合理的。

我被这些更高版本的Vaadin的升级步骤所吸引,但对我来说其中没有任何变化。

当被问及时,我会说Spring没有识别出我的视图。即使是旧的@EnableVaadin()注释也没有起作用。此时我无法清晰地思考,甚至在研究Vaadin现在为什么使用vite.config.ts而不是webpack.config.js的更改时也无法思考。非常感谢您指出问题可能存在的位置。


有些不对劲。你怎么可能在没有 vaadin-maven-plugin 的情况下运行 / 工作 21.x 版本?添加 flow-maven-plugin 是绝对不应该做的。始终使用 vaadin-maven-plugin。此外,强烈建议使用 Vaadin BOM,其版本与 vaadin-maven-plugin 相同。 - Knoobie
4
此外,请参考:https://dev59.com/mn0QtIcB2Jgan1znhcts - 您正在升级到不受支持的Spring Boot版本。(这将解决您的问题) - Knoobie
1
今天我也遇到了同样的问题。日志应该显示错误:https://github.com/vaadin/flow/issues/15792。 - Tarek Oraby
你是对的 @Knoobie。我之前使用了 vaadin-maven-plugin 并尝试使用 flow-maven-plugin 来运行它。但实际上,需要 Boot 版本为 2.7.x 或更高版本。不过,需要注意的是:升级指南中提到 2.6.6 版本也足够了。如果你把你的评论转成回答,我会很乐意接受的。 - Paul
1
太好了!Tarek还为文档创建了一个魔法门票,以确保更少的人会遇到这个问题。 - Knoobie
1个回答

0

所有功劳归于 @Knoobie,他的 简洁回答 包含了正确的解决方案。

Vaadin 23.3.x 需要至少 2.7.x 才能工作。

Vaadin 升级指南生成器在查看从 v21 到 v23 的迁移步骤时,错误地将 SpringBoot 的最小版本引用为 2.6.6。他们将在不久的将来修复此问题。


他们仍然没有修复他们的文档。 - Jose Martinez
他们还没有修复他们的文档。 - undefined
我并不感到惊讶。在我回答的时候,我通过 David L. 个人联系了 Vaadin,他会将问题内部转交... 另外需要说明的是,我们目前使用的是 SprintBoot 3,需要 Java17 和 Vaadin 24+。 - Paul

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接