Erstellen mehrerer HTTP-Abschnitte in Spring Security Java Config
Mit der XML-Konfiguration von Spring Security können Sie mehrere HTTP-Elemente definieren, um unterschiedliche Zugriffsregeln für verschiedene Teile Ihrer Anwendung festzulegen. Das Beispiel in8.6 Erweiterte Namespace-Konfiguration Definiert separate zustandsbehaftete und zustandslose Abschnitte der Anwendung, wobei der erstere Sitzungen und die Formularanmeldung verwendet und der letztere keine Sitzungen und die BASIC-Authentifizierung verwendet:
<!-- 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>
Ich kann nicht herausfinden, wie ich dasselbe mit Java Config machen soll. Es ist wichtig, dass ich Sitzungen deaktiviere und einen anderen Einstiegspunkt für meine Webdienste verwende. Im Moment habe ich folgendes:
@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));
});
}
Auf diese Weise konnte ich den CSRF-Schutz für meine Webdienste deaktivieren. Aber ich brauche wirklich eine separate HTTP-Konfiguration, damit ich Sitzungen deaktivieren und einen anderen Einstiegspunkt angeben kann. Ich weiß, dass ich es gebrauchen kannrequestMatcher
oderrequestMatchers
um die URIs einzuschränken, auf die es angewendet wird, aber es scheint nicht, dass Sie dies verwenden können, um separate Konfigurationen zu erstellen. Es ist fast so, wie ich es brauchezwei configure(HttpSecurity security)
Methoden.