Spring Security Java-Config nicht erzeugen logout-url
Bin ich mit Spring 4.0.5.RELEASE und Spring Security 3.2.4.
Ich versuche, erstellen Sie eine einfache Beispielanwendung mit java-config (basierend auf dem Feder-Proben). Die app startet und die Authentifizierung ordnungsgemäß funktioniert, bin ich umgeleitet auf eine login-form, die beim Zugriff auf geschützte url /Einstellungen/Profil
Allerdings gibt es keine /logout url generiert? wenn ich auf localhost:8080/logout bekomme ich einen 404.
Ich habe einen ähnlichen code wie bei einem vorherigen Projekt, also vielleicht hat etwas zu tun mit Versionen?
Heres my Security Config
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication().withUser("user").password("password").roles("USER");
auth.inMemoryAuthentication().withUser("admin").password("password").roles("ADMIN");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.antMatchers("/settings/**").hasRole("ROLE_ADMIN")
.and()
.formLogin()
.and()
.logout()
.deleteCookies("remove")
.invalidateHttpSession(true)
.logoutUrl("/logout")
.logoutSuccessUrl("/logout-success")
.permitAll();
}
}
Hier ist mein WebAppInitializer bootstrap die app
public class WebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[] { SecurityConfig.class , MvcConfig.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
protected String[] getServletMappings() {
return new String[] {"/"};
}
}
und schließlich meine MvcConfig
@EnableWebMvc
@Configuration
@ComponentScan(basePackages = {"web"})
public class MvcConfig extends WebMvcConfigurerAdapter {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/WEB-INF/views");
viewResolver.setSuffix(".jsp");
return viewResolver;
}
}
InformationsquelleAutor Ayub Malik | 2014-06-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Standardmäßig POST-Anforderung erforderlich ist, um den logout-url. Durchführen logout auf die GET-Anforderung, die Sie benötigen:
Oder wenn Sie wollen, zu unterstützen
PUT
oder eine andere Methode, übergeben Sie diese als parameter:Siehe die Dokumentation: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/ (Abschnitt 6.5.3. Logging Out)
Ich stehe vor einem ähnlichen problem. Ich arbeite gerade an einem POST /appContextRoot/logout und die übergabe der erforderlichen XSRF-TOKEN-header, und noch heute bekomme ich eine 404. Ist da mehr dahinter?
Erwähnenswert, dass dies ist nicht best-practice, als Sie sich öffnet, die Sie bis zu potential CSRF-Angriffe. Aus der JavaDoc:
The URL that triggers log out to occur (default is "/logout"). If CSRF protection is enabled (default), then the request must also be a POST. This means that by default POST "/logout" is required to trigger a log out. If CSRF protection is disabled, then any HTTP method is allowed. It is considered best practice to use an HTTP POST on any action that changes state (i.e. log out) to protect against CSRF attacks. ...
InformationsquelleAutor Evgeni Dimitrov