SuperAPI AI 工具集

security

安全与审计

查看项目

更新于 10-16 09:28

技能介绍

用途:在 Vaadin 25 中借助 Spring Security 配置应用安全,包括登录、视图访问控制、登出与 OAuth2/OpenID Connect 集成。适合询问“添加安全”“添加登录”等场景;若涉及 @Route、@Layout、AppLayout、SideNav 或 URL 参数,应改用视图与导航技能;若需保护 React/Hilla 视图的 ViewConfig.loginRequired,应改用客户端视图技能。

主要能力:

  1. Spring Security 配置:添加 spring-boot-starter-security 依赖,使用 @EnableWebSecurity 与 VaadinSecurityConfigurer.vaadin(),自动处理 CSRF、登出、请求缓存、异常处理、Vaadin 框架请求放行与导航访问控制。
  2. 登录视图:使用内置 LoginForm,配合 @AnonymousAllowed、autoLayout = false、login.setAction("login"),并通过 BeforeEnterObserver 检查 ?error 参数;在 SecurityConfig 中调用 configurer.loginView(LoginView.class) 注册。
  3. 视图访问控制:注解 @AnonymousAllowed(任何人)、@PermitAll(已认证用户)、@RolesAllowed("ADMIN")(指定角色)、@DenyAll(无人)。注意 Vaadin 的 @PermitAll 不同于 Jakarta 标准的含义。无注解默认 @DenyAll;布局与视图独立检查,两者都必须授权;接口注解不被检查;多注解优先级为 @DenyAll > @AnonymousAllowed > @RolesAllowed > @PermitAll。建议定义 Roles 常量类避免拼写错误。
  4. 编程式检查:注入 AuthenticationContext,用 getAuthenticatedUser(UserDetails.class) 获取用户、hasRole(...) 判断角色。
  5. 登出:推荐 AuthenticationContext.logout(),字段需声明为 transient;默认重定向到 /,可用 configurer.loginView(LoginView.class, "/goodbye") 自定义。备选 SecurityContextLogoutHandler,须先重定向再调用。
  6. OAuth2/OIDC:添加 spring-boot-starter-oauth2-client,配置 Google(内置 provider,只需 client-id、client-secret、scope)或 Keycloak 等自定义 provider(还需 issuer-uri、authorization-grant-type)。安全配置改用 configurer.oauth2LoginPage("/oauth2/authorization/google", "{baseUrl}"),模板变量支持 {baseScheme}、{baseHost}、{basePort}、{basePath}。使用 OAuth2 时无需 LoginView。登出同样用 AuthenticationContext.logout()。GitHub、Okta、Azure AD 模式相同,oauth2LoginPage() 路径中的 registrationId 需与 application.properties 键一致。

限制与注意:不要硬编码凭据,生产环境应使用 JDBC、LDAP 或 OAuth2,内存 {noop} 密码仅供开发;每个视图与布局都要加注解;@Secured 与 @PreAuthorize 在 Vaadin 视图上不受支持;不要用 HttpSecurity 的 URL 模式规则控制 Vaadin 视图访问(所有视图走同一 servlet 端点),URL 模式规则仍适用于 REST 等非 Vaadin 端点。查询不确定的 API 细节时可使用 Vaadin MCP 工具,设置 vaadin_version 为 "25"、ui_language 为 "java"。