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

Spring Security Vaadin24配置类permitAll不生效,仅视图级@PermitAll有效

解决Vaadin+Spring Security全局放行后视图无法加载的问题

问题根源

当继承VaadinWebSecurity时,父类的configure(http)方法会注入Vaadin框架专属的安全规则,包括路由请求的权限校验逻辑。原代码中先自定义permitAll规则再调用父类配置,会导致父类规则覆盖自定义的全局放行设置,进而使Vaadin视图路由无法被正确识别和放行。

修复方案

调整配置顺序,先执行父类的安全初始化,再添加全局放行规则,确保所有请求(包括Vaadin路由请求)都能被正确允许访问。

修改后的完整配置类

package com.fractal.security;
import com.fractal.views.LoginView;
import com.vaadin.flow.spring.security.VaadinWebSecurity;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.core.userdetails.User;
import org.springframework.security.provisioning.InMemoryUserDetailsManager;
import org.springframework.security.provisioning.UserDetailsManager;

@EnableWebSecurity
@Configuration
public class SecurityConfig extends VaadinWebSecurity {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 先执行父类配置,初始化Vaadin安全机制
        super.configure(http);
        
        // 配置全局所有请求允许访问
        http.authorizeHttpRequests()
                .anyRequest().permitAll();
        
        // 全局放行场景下,登录视图设置可注释(否则仍会跳转登录页但无需验证)
        // setLoginView(http, LoginView.class);
    }

    @Override
    protected void configure(WebSecurity web) throws Exception {
        web.ignoring().requestMatchers(
             "/VAADIN/**",
            "/favicon.ico",
            "/robots.txt",
            "/manifest.webmanifest",
            "/sw.js",
            "/offline.html",
            "/icons/**",
            "/images/**",
            "/styles/**",
            "/h2-console/**");
        super.configure(web);
    }

    @Bean
    UserDetailsManager userDetailsManager(){
        return new InMemoryUserDetailsManager(
                User.withUsername("test")
                        .password("{noop}test")
                        .roles("USER")
                        .build()
        );
    }
}

补充说明

  1. 权限精细化控制:如果后续需要对部分视图做权限限制,可替换anyRequest().permitAll()为针对性配置,示例:
    http.authorizeHttpRequests()
            .requestMatchers("/about").permitAll()
            .requestMatchers("/admin/**").hasRole("ADMIN")
            .anyRequest().authenticated();
    
  2. 密码编码器注意:代码中{noop}为明文密码标记,仅用于测试环境,生产环境需使用BCrypt等安全密码编码器。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 02:12:24