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

Vaadin24集成Azure SSO时所有路由均报Access Denied(已加@PermitAll)

问题分析与解决方案

你的问题核心是SecurityConfig的配置逻辑和顺序错误,导致Vaadin视图权限注解与Spring Security OAuth2流程冲突,同时未正确处理OAuth2回调路径。以下是具体修正步骤:

1. 修正SecurityConfig配置

VaadinWebSecurity的super.configure(http)会自动处理Vaadin路由、静态资源等安全规则,需先调用该方法,再添加OAuth2相关配置,同时启用方法级注解支持:

@EnableWebSecurity
@Configuration
@EnableMethodSecurity(securedEnabled = true, jsr250Enabled = true) // 启用@PermitAll等注解解析
public class SecurityConfig extends VaadinWebSecurity {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        // 优先让Vaadin处理自身安全规则
        super.configure(http);

        // 配置OAuth2登录流程
        http.oauth2Login(oauth2 -> oauth2
                .loginPage("/login") // 指定登录入口,Vaadin会自动跳转至此
        );

        // 允许OAuth2回调、登录页面的无权限访问
        http.authorizeHttpRequests(auth -> auth
                .requestMatchers("/login", "/login/oauth2/code/**", "/oauth2/**")
                .permitAll()
        );
    }
}

2. 检查Azure应用注册的重定向URI

确保Azure Portal中注册的重定向URI与配置一致,格式应为:
http://localhost:8080/login/oauth2/code/[MY APP]
其中[MY APP]对应你在application.properties中spring.security.oauth2.client.registration后的名称。

3. 验证视图权限注解

保持视图上的@PermitAll注解不变,但需确认MainLayout未添加更严格的权限注解(如@RolesAllowed),否则会覆盖子视图的权限设置。

原配置问题说明

  • 你先自定义/** permitAll再调用super.configure(http),导致Vaadin的安全规则被覆盖,无法识别视图上的权限注解。
  • 未启用方法级安全注解支持,Vaadin无法解析@PermitAll的权限规则。
  • 未明确配置OAuth2登录流程,Spring Security无法正确处理Azure回调并完成用户认证。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 10:05:03