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

Vaadin 14升级至23后路由异常,关联权限注解问题

Vaadin 23升级后@Secured/@RolesAllowed视图RouterLink导航404问题解析

核心原因

Vaadin 23在安全机制与路由的整合逻辑上和Vaadin 14存在显著差异,导致带权限注解的视图出现404:

  • 安全注解依赖配置变更:Vaadin 23更依赖Spring Security的原生方法级安全支持,若未在Spring Security配置中启用@Secured和@RolesAllowed的支持,这些注解会直接失效,视图会被判定为“未授权访问”,但路由系统会返回404而非明确的权限不足提示。
  • 路由导航权限校验时机提前:Vaadin 23中RouterLink导航时会预先校验用户权限,若用户无对应角色,路由系统会直接判定路径不存在(返回404);而Vaadin 14是先完成导航再执行权限校验,因此不会出现404,而是展示权限错误提示。
  • @AnonymousAllowed的特殊性:该注解会完全跳过权限校验,视图能被路由系统正常识别,因此导航流程可正常执行。

解决步骤

  1. 启用Spring Security方法级安全
    在Spring Security配置类上添加注解,开启@Secured和@RolesAllowed的支持:

    @EnableGlobalMethodSecurity(securedEnabled = true, jsr250Enabled = true)
    public class SecurityConfig extends VaadinWebSecurity {
        // 自定义配置内容
    }
    
  2. 确认用户角色匹配
    确保当前登录用户拥有目标视图注解中指定的角色,比如@Secured("ADMIN")要求用户必须具备ADMIN角色。

  3. 正确配置Vaadin安全路径
    确保Spring Security放行Vaadin的内部请求和必要路径,示例配置(基于SecurityFilterChain):

    @Bean
    public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
        http.authorizeHttpRequests(auth -> auth
                .requestMatchers(VadinWebSecurity::isFrameworkInternalRequest).permitAll()
                .anyRequest().authenticated()
        );
        http.formLogin(form -> form.loginPage("/login").permitAll());
        http.logout(logout -> logout.logoutSuccessUrl("/login"));
        VaadinWebSecurity.configure(http);
        return http.build();
    }
    
  4. 自定义权限不足处理
    若希望替换404为明确的权限提示,可配置AccessDeniedHandler:

    @Bean
    public AccessDeniedHandler accessDeniedHandler() {
        return (request, response, accessDeniedException) -> {
            response.sendRedirect("/access-denied");
            // 或跳转至自定义Vaadin权限提示视图
        };
    }
    

    然后在SecurityFilterChain中添加:

    http.exceptionHandling(ex -> ex.accessDeniedHandler(accessDeniedHandler()));
    

内容的提问来源于stack exchange,提问作者Tomás Atrat

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 13:12:42