Création de plusieurs HTTP sections au Printemps de Sécurité Java Config

À l'aide de Printemps de Sécurité XML de configuration, vous pouvez définir plusieurs HTTP éléments de spécifier les différentes règles d'accès pour les différentes parties de votre application. L'exemple donné dans 8.6 Advanced Configuration D'Espace De Noms définit séparé stateful apatrides et les sections de la demande, avec l'ancienne à l'aide de sessions et le formulaire de connexion, et le dernier à l'aide de pas de session et l'authentification de BASE:

<!-- 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>

Je ne peux pas comprendre comment faire la même chose avec Java Config. Il est important que je désactiver les sessions et utiliser un autre point d'entrée pour mon web services. Maintenant j'ai le texte suivant:

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

À l'aide de ce que j'étais capable de désactiver la protection CSRF pour mes services web. Mais j'ai vraiment besoin d'un ensemble distinct de configuration HTTP, afin que je puisse désactiver les sessions et spécifier un autre point d'entrée. Je sais que je peux utiliser requestMatcher ou requestMatchers pour limiter les URIs qui elle s'applique, mais il n'apparaît pas que vous pouvez l'utiliser pour créer des configurations distinctes. C'est presque comme si j'avais besoin deux configure(HttpSecurity security) méthodes.

  • Créer plusieurs classes pour la configuration de la sécurité. Le plus simple est de créer une configuration générale avec certains internes @Configuration des classes pour configurer HttpSecurity.
  • Merci. C'était la réponse. Aussi, github.com/spring-projects/spring-security/blob/master/config/... montre un exemple de le faire avec statique à l'intérieur des classes. Pouvez-vous mettre votre commentaire en réponse afin que je puisse marquer comme réponse et donnez-lui un upvote?
  • L'URL de référence à la documentation (8.6 Advanced Namespace Configuration) est cassé. Pas vous pouvez le trouver ici, docs.printemps.io/printemps-sécurité/site/docs/3.2.5.PRESSE/...