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
相关产品推荐
相关产品推荐

