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

Spring Security+Vaadin配置/notifications端点解决401报错

问题原因
  • 启动报错的核心原因:VaadinWebSecurityConfigurerAdapter的父类configure()方法内部已经默认配置了anyRequest().authenticated()全局认证规则,Spring Security要求路径匹配规则必须按「精确路径在前、宽泛通配在后」的顺序配置,anyRequest()必须是最后一条规则。你之前把自定义的antMatchers规则写在super.configure(http)调用之后,相当于在全局规则之后追加精确路径规则,直接触发配置校验异常。
  • 接口401的额外原因:你在Controller方法上加的@AnonymousAllowed是Vaadin专属的视图访问注解,仅对Vaadin Flow路由页面生效,对@RestController定义的标准Spring MVC接口没有放行效果,不能靠这个注解绕过安全校验。
正确配置方案

调整WebSecurityConfig的配置顺序,必须在调用父类configure方法之前定义你要放行的端点规则,代码如下:

@EnableWebSecurity
@Configuration
public class WebSecurityConfig extends VaadinWebSecurityConfigurerAdapter {

  private static final String LOGIN_URL = "/login";

  @Override
  protected void configure(HttpSecurity http) throws Exception {
    // 1. 先配置自定义的公开端点规则,必须放在super.configure调用之前
    http.authorizeRequests()
        .antMatchers("/notifications")
        .permitAll();
    // 可选:如果webhook请求触发403 CSRF错误,放开下面这行注释给端点关闭CSRF校验
    // http.csrf().ignoringAntMatchers("/notifications");

    // 2. 再调用父类配置,加载Vaadin默认的安全规则
    super.configure(http);

    // 3. 最后配置OAuth2登录逻辑
    http.oauth2Login()
        .loginPage(LOGIN_URL)
        .permitAll();
  }
}
配置说明
  • 规则顺序不能调换:父类方法加载的Vaadin默认规则最后会追加anyRequest().authenticated(),所有自定义的精确路径放行规则必须在这之前定义,否则就会触发你遇到的启动错误。
  • 配置完成后重启应用,第三方服务发送到/notifications的POST请求不需要携带认证凭证,不会再返回401未授权错误。
  • 如果你后续升级到Spring Security 6.x版本,把代码里的antMatchers替换为requestMatchers、ignoringAntMatchers替换为ignoringRequestMatchers即可适配。

内容的提问来源于stack exchange,提问作者Александр Хворостенко

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 13:45:30