Criando várias seções HTTP no Spring Security Java Config

Usando a configuração XML do Spring Security, você pode definir vários elementos HTTP para especificar diferentes regras de acesso para diferentes partes do seu aplicativo. O exemplo dado em8.6 Configuração Avançada de Namespace define seções separadas de stateful e stateless do aplicativo, com o primeiro usando sessões e login de formulário, e o último usando sem sessões e autenticação BASIC:

<!-- Stateless RESTful service using Basic authentication -->
<http pattern="/restful/**" create-session="stateless">
    <intercept-url pattern='/**' access='ROLE_REMOTE' />
    <http-basic />
</http>

<!-- Empty filter chain for the login page -->
<http pattern="/login.htm*" security="none"/>

<!-- Additional filter chain for normal users, matching all other requests -->
<http>
    <intercept-url pattern='/**' access='ROLE_USER' />
    <form-login login-page='/login.htm' default-target-url="/home.htm"/>
    <logout />
</http>

Eu não consigo descobrir como fazer a mesma coisa com o Java Config. É importante desativar as sessões e usar um ponto de entrada diferente para meus serviços da web. Agora eu tenho o seguinte:

@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));
                });
}

Usando isso, consegui desativar a proteção contra CSRF em meus serviços da Web. Mas eu realmente preciso de uma configuração HTTP inteira para poder desabilitar as sessões e especificar um ponto de entrada diferente. Eu sei que posso usarrequestMatcher ourequestMatchers para restringir os URIs aos quais se aplica, mas não parece que você pode usar isso para criar configurações separadas. É quase como se eu precisassedois configure(HttpSecurity security) métodos.

questionAnswers(1)

yourAnswerToTheQuestion