Spring 4.0.5.RELEASEとSpring Security .2.4を使用しています。
Java config(Springサンプルに基づく)を使用して簡単なサンプルアプリを作成しようとしています。アプリが起動し、認証が正しく機能します。つまり、次の場合にログインフォームにリダイレクトされます。保護されたURLへのアクセス/ settings/profile
ただし、/ logout urlは生成されませんか? localhost:8080/logoutを押すと、404が返されます。
以前のプロジェクトで同様のコードを使用したことがあるので、バージョンと関係があるのでしょうか。
これが私のセキュリティ構成です
@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();
}
}
これが私のWebAppInitializerto bootstrap the 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[] {"/"};
}
}
そして最後に私の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;
}
}
デフォルトでは、ログアウトURLにPOSTリクエストが必要です。GETリクエストでログアウトを実行するには、次のものが必要です。
http
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout"));
または、PUT
または他のメソッドをサポートする場合は、これをパラメーターとして渡します。
http
.logout()
.logoutRequestMatcher(new AntPathRequestMatcher("/logout", "PUT"));
ドキュメントを参照してください: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/ (セクション6.5.3。ログアウト)