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 configurerHttpSecurity
. - 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/...
Vous devez vous connecter pour publier un commentaire.
Au Printemps de Sécurité pour imiter le comportement de plusieurs
<http>
éléments de XML en Java config créer plusieurs classes pour la configuration de la sécurité. En général, c'est la meilleure/la plus simple pour créer une configuration de sécurité commune avec plusieurs classes internes pour la définition de la sécurité pourHttpSecurity
. Voir ici pour un échantillon.Et ici, la section de l'officiel du Printemps de Sécurité de la documentation:
5.7 Plusieurs HttpSecurity
protected void configure(HttpSecurity http) { http.antMatcher("/secure**")
côtés:protected void configure(HttpSecurity http) { http.antMatcher("/api/**")
Le problème avec le code, le problème est que ce code correspond à TOUTES les url:security.authorizeRequests()