在Spring Security Java Config中创建多个HTTP部分

使用Spring Security XML配置,您可以定义多个HTTP元素,以便为应用程序的不同部分指定不同的访问规则。 8.6高级命名空间配置中给出的示例定义了应用程序的单独的有状态和无状态部分,前者使用会话和表单登录,后者不使用会话和BASIC身份validation:

             

我无法弄清楚如何使用Java Config做同样的事情。 重要的是我禁用会话并为我的Web服务使用不同的入口点。 现在我有以下内容:

 @Override public void configure(WebSecurity security) { security.ignoring().antMatchers("/resource/**", "/favicon.ico"); } @Override protected void configure(HttpSecurity security) throws Exception { security .authorizeRequests() .anyRequest().authenticated() .and().formLogin() .loginPage("/login").failureUrl("/login?loginFailed") .defaultSuccessUrl("/ticket/list") .usernameParameter("username") .passwordParameter("password") .permitAll() .and().logout() .logoutUrl("/logout").logoutSuccessUrl("/login?loggedOut") .invalidateHttpSession(true).deleteCookies("JSESSIONID") .permitAll() .and().sessionManagement() .sessionFixation().changeSessionId() .maximumSessions(1).maxSessionsPreventsLogin(true) .sessionRegistry(this.sessionRegistryImpl()) .and().and().csrf() .requireCsrfProtectionMatcher((r) -> { String m = r.getMethod(); return !r.getServletPath().startsWith("/services/") && ("POST".equals(m) || "PUT".equals(m) || "DELETE".equals(m) || "PATCH".equals(m)); }); } 

使用此function,我可以为我的Web服务禁用CSRF保护。 但我真的需要一个完整的单独HTTP配置,以便我可以禁用会话并指定一个不同的入口点。 我知道我可以使用requestMatcherrequestMatchers来限制它应用的URI,但似乎不能使用它来创建单独的配置。 这几乎就像我需要两个 configure(HttpSecurity security)方法。

在Spring Security中,为了模仿Java中多个元素的行为,在Java配置中为安全配置创建了多个类。 通常,为HttpSecurity的安全性定义创建具有多个内部类的公共安全性配置是最好/最简单的。 请看这里的样品。

这里是官方Spring Security文档中的相关部分:
5.7多个HttpSecurity