복붙노트

[SPRING] Spring Security Java Config가 로그 아웃 URL을 생성하지 않습니다.

SPRING

Spring Security Java Config가 로그 아웃 URL을 생성하지 않습니다.

나는 Spring 4.0.5.RELEASE와 Spring Security 3.2.4를 사용하고있다.

Java 구성 (스프링 샘플을 기반으로)을 사용하여 간단한 샘플 응용 프로그램을 만들려고합니다. 앱이 시작되고 인증이 올바르게 작동합니다. 즉, 보호 된 url / settings / profile에 액세스 할 때 로그인 양식으로 리디렉션됩니다.

그러나 로그 아웃 URL이 생성되지 않았습니까? localhost : 8080 / logout을 치면 404가됩니다.

이전 프로젝트에서 비슷한 코드를 사용 했으므로 버전과 관련이있을 수 있습니까?

Heres 내 보안 구성

@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;
    }
}

해결법

  1. ==============================

    1.기본적으로 POST 요청은 로그 아웃 URL에 필요합니다. GET 요청에서 로그 아웃을 수행하려면 다음이 필요합니다.

    기본적으로 POST 요청은 로그 아웃 URL에 필요합니다. 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. 로그 아웃)

  2. from https://stackoverflow.com/questions/24108585/spring-security-java-config-not-generating-logout-url by cc-by-sa and MIT license