Vaadin 24如何在多个Vaadin项目中复用独立登录工程?
Vaadin 24 登录工程复用问题解决方案
1. 触发登录工程中的LoginView
要在后台管理工程中调用登录工程的LoginView,核心是让主工程识别并加载登录工程的Spring Security配置与Vaadin视图,具体步骤如下:
- 确保Spring Security配置可被扫描:登录工程中的Security配置类(使用
SecurityFilterChain或传统配置方式)需标注@Configuration和@EnableWebSecurity,同时主工程要能扫描到该类。可在主工程的@SpringBootApplication注解中扩展扫描包路径:@SpringBootApplication(scanBasePackages = {"com.your.login.module", "com.your.admin.module"}) public class AdminApplication { public static void main(String[] args) { SpringApplication.run(AdminApplication.class, args); } } - 绑定登录页面路由:登录工程的LoginView需添加
@Route("login")注解明确路由地址,同时在Security配置中指定登录页为该路由:@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers(VaadinWebSecurity.getDefaultLoginUrl()).permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") // 指向登录工程的LoginView路由 ); VaadinWebSecurity.configure(http); return http.build(); } - 确保Vaadin视图被加载:只要Spring能扫描到登录工程的LoginView类(通过包扫描配置),Vaadin会自动注册该视图的路由,主工程访问
/login即可触发登录界面。
2. 登录成功后重定向至主工程默认路由
默认情况下,Spring Security登录成功后会跳转至用户此前尝试访问的受保护页面;若直接访问登录页,需手动配置默认跳转地址:
- 在登录工程的Security配置中,强制设置登录成功后跳转至主工程的
/路由:
第二个参数@Bean public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception { http .authorizeHttpRequests(auth -> auth .requestMatchers(VaadinWebSecurity.getDefaultLoginUrl()).permitAll() .anyRequest().authenticated() ) .formLogin(form -> form .loginPage("/login") .defaultSuccessUrl("/", true) // 强制跳转到主工程默认路由 ); VaadinWebSecurity.configure(http); return http.build(); }true表示无论用户是直接访问登录页还是被拦截跳转过来,登录成功后都强制跳转到主工程的/路由。
额外注意事项
- 登录工程中的核心Bean(如
UserDetailsService、PasswordEncoder)需标注@Service或@Component,确保主工程能正确注入这些依赖。 - 主工程需自行实现
AppShellConfigurator,用于配置应用全局页面设置(如标题、favicon),因为登录工程已移除该类。 - 测试时先启动主工程,访问
/login确认登录界面正常显示,登录后检查是否自动跳转到主工程的/路由。
内容的提问来源于stack exchange,提问作者clickguy
相关产品推荐
相关产品推荐

