Подтвердить что ты не робот

Spring Безопасность Java Config не генерирует URL выхода

Я использую Spring 4.0.5.RELEASE и Spring Безопасность 3.2.4.

Я пытаюсь создать простое примерное приложение с помощью java config (на основе образцов Spring). Приложение запускается, и аутентификация работает правильно, то есть я перенаправляется на форму входа при доступе к защищенному URL /настройкам/профилю

Однако не существует /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();
    }
}

Вот мой WebAppInitializer для загрузки приложения

 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;
    }
}
4b9b3361

Ответ 1

По умолчанию для запроса выхода требуется запрос POST. Чтобы выполнить выход из запроса GET, вам необходимо:

http
      .logout()
          .logoutRequestMatcher(new AntPathRequestMatcher("/logout"));

См. Документы: http://docs.spring.io/spring-security/site/docs/3.2.4.RELEASE/reference/htmlsingle/ (раздел 6.5.3. Выход из системы)