You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 3迁移后登录页面加载异常及登录跳转失败问题

Vaadin Security迁移到Spring Boot3后的登录页面异常排查方案

问题现象

将项目从Vaadin Security迁移至Spring Boot 3后,访问localhost:8080登录页面时,页面尚未完全加载控制台就输出错误日志,输入用户名密码后无法跳转至主页面。

关键日志信息

[nio-8080-exec-6] s.w.a.DelegatingAuthenticationEntryPoint : Match found! Executing org.springframework.security.web.authentication.LoginUrlAuthenticationEntryPoint@1abc3085
 [nio-8080-exec-6] o.s.s.web.DefaultRedirectStrategy        : Redirecting to http://localhost:8080/login
 [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : Securing GET /login
 [nio-8080-exec-7] o.s.s.w.a.AnonymousAuthenticationFilter  : Set SecurityContextHolder to anonymous SecurityContext
 [nio-8080-exec-7] o.s.security.web.FilterChainProxy        : Secured GET /login
 [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : GET "/login", parameters={}
 [nio-8080-exec-7] o.s.w.s.handler.SimpleUrlHandlerMapping  : Mapped to ParameterizableViewController [view="login"]
 [nio-8080-exec-7] o.j.s.OpenEntityManagerInViewInterceptor : Opening JPA EntityManager in OpenEntityManagerInViewInterceptor
 [nio-8080-exec-7] o.s.w.s.v.ContentNegotiatingViewResolver : Selected 'text/html' given [text/html, application/xhtml+xml, image/avif, image/webp, image/apng, application/xml;q=0.9, */*;q=0.8, application/signed-exchange;v=b3;q=0.7]
 [nio-8080-exec-7] o.j.s.OpenEntityManagerInViewInterceptor : Closing JPA EntityManager in OpenEntityManagerInViewInterceptor
 [nio-8080-exec-7] o.s.web.servlet.DispatcherServlet        : Completed 200 OK
 [nio-8080-exec-8] o.s.web.servlet.DispatcherServlet        : GET "/css/main.css", parameters={}
 [nio-8080-exec-8] nServletConfiguration$RootExcludeHandler : Mapped to org.springframework.web.servlet.mvc.ServletForwardingController@51d2218e
 [nio-8080-exec-8] o.a.c.c.C.[.[.[/].[springServlet]        : The response class [class org.springframework.security.web.firewall.FirewalledResponse] could not be unwraped to the Catalina response class and will be closed immediately after the forward
 [nio-8080-exec-8] o.s.web.servlet.DispatcherServlet        : Completed 404 NOT_FOUND
 [l-2 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-2 - Pool stats (total=10, active=0, idle=10, waiting=0)
 [l-2 housekeeper] com.zaxxer.hikari.pool.HikariPool        : HikariPool-2 - Fill pool skipped, pool has sufficient level or currently being filled (queueDepth=0).
 [nio-8080-exec-9] o.apache.coyote.http11.Http11Processor   : Error parsing HTTP request header

java.io.EOFException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1288) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1176) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:785) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:348) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:264) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]

[nio-8080-exec-9] o.apache.coyote.http11.Http11Processor   : Error state [CLOSE_CONNECTION_NOW] reported while processing request

java.io.EOFException: null
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.fillReadBuffer(NioEndpoint.java:1288) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.read(NioEndpoint.java:1176) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11InputBuffer.fill(Http11InputBuffer.java:785) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11InputBuffer.parseRequestLine(Http11InputBuffer.java:348) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:264) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1736) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.20.jar:10.1.20]
    at java.base/java.lang.Thread.run(Thread.java:840) ~[na:na]

问题分析

  1. 静态资源404:/css/main.css返回404,说明Spring Boot未正确映射静态资源路径,可能是迁移后静态资源配置丢失或路径变更。
  2. Spring Security防火墙与Vaadin Servlet冲突:日志中FirewalledResponse无法被Catalina响应类unwrap,是因为Spring Security的防火墙包装了响应对象,而Vaadin的Servlet转发时无法正确解析该响应,导致请求处理异常。
  3. EOFException:该异常是连接提前关闭的表现,大概率是前面的静态资源加载失败、响应处理异常导致页面加载中断,进而触发连接关闭错误。

解决方案

1. 修复静态资源映射

确保Spring Boot能正确访问静态资源:

  • 确认main.css放在src/main/resources/static/css/目录下(Spring Boot默认静态资源目录)。
  • 如果自定义了静态资源路径,在application.properties或application.yml中配置:
    spring.web.resources.static-locations=classpath:/static/,classpath:/public/,classpath:/resources/
    

2. 调整Spring Security配置,排除Vaadin相关路径

Spring Boot3中,需要让Spring Security不对Vaadin的内部请求进行拦截,同时处理登录页面的资源访问:

@Configuration
@EnableWebSecurity
public class SecurityConfig {

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http
            .authorizeHttpRequests(auth -> auth
                // 允许静态资源匿名访问
                .requestMatchers("/css/**", "/js/**", "/images/**").permitAll()
                // 允许Vaadin内部资源匿名访问
                .requestMatchers("/VAADIN/**").permitAll()
                // 允许登录页匿名访问
                .requestMatchers("/login").permitAll()
                // 其他请求需要认证
                .anyRequest().authenticated()
            )
            .formLogin(form -> form
                .loginPage("/login")
                .defaultSuccessUrl("/", true) // 登录成功后跳转主页面
                .permitAll()
            )
            .logout(logout -> logout.permitAll())
            // 关闭CSRF(Vaadin自身处理CSRF,避免冲突)
            .csrf(csrf -> csrf.disable())
            // 调整防火墙配置,避免响应包装冲突
            .securityContext((securityContext) -> securityContext
                .requireExplicitSave(false)
            );

        return http.build();
    }
}

3. 确保Vaadin与Spring Boot3版本兼容

  • 检查pom.xml中Vaadin依赖版本为24.x(适配Spring Boot3的最低版本),且引入vaadin-spring-boot-starter依赖。
  • 确认Vaadin的自动配置类正常生效,无需手动配置Vaadin Servlet。

4. 排查EOFException

EOFException一般是衍生问题,解决前面的静态资源和Security配置问题后,页面能正常加载,该异常通常会自动消失。如果仍存在,可尝试:

  • 清理浏览器缓存,重新访问。
  • 检查Tomcat连接超时配置,确保时间设置合理。

内容的提问来源于stack exchange,提问作者Curious_Soul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 03:07:02