복붙노트

[SPRING] 스프링 보안의 여러 antmatchers

SPRING

스프링 보안의 여러 antmatchers

나는 다음과 같은 다섯 명의 antmatcher가있는 콘텐츠 관리 시스템에서 작업합니다.

http.authorizeRequests()
        .antMatchers("/", "/*.html").permitAll()
        .antMatchers("/user/**").hasRole("USER")
        .antMatchers("/admin/**").hasRole("ADMIN")
        .antMatchers("/admin/login").permitAll()
        .antMatchers("/user/login").permitAll()
        .anyRequest().authenticated()
        .and()
        .csrf().disable();

방문자가 루트 경로 (/ *)에있는 모든 사이트를 볼 수 있고 사용자는 (/ user) 만 볼 수 있고 admin (/ admin) 만 볼 수 있으며 사용자와 사용자는 각각 두 개의 로그인 페이지가 있음을 의미한다고 가정합니다. 관리자.

이 코드는 admin 섹션을 제외하고는 정상적으로 작동하는 것 같습니다. 작동하지 않지만 반환 액세스가 예외를 거부했습니다.

해결법

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

    1.나는 그 문제가 당신의 규칙의 순서대로 있다고 믿는다.

    나는 그 문제가 당신의 규칙의 순서대로 있다고 믿는다.

    .antMatchers("/admin/**").hasRole("ADMIN")
    .antMatchers("/admin/login").permitAll()
    

    규칙의 순서가 중요하며보다 구체적인 규칙이 우선되어야합니다. 이제 / admin으로 시작하는 모든 작업에는 / admin / login 경로 (/ admin / login이 / admin / ** 규칙에 이미 일치하므로 두 번째 규칙이 무시되므로) ADMIN 역할의 인증 된 사용자가 필요합니다.

    따라서 로그인 페이지에 대한 규칙은 / admin / ** 규칙 앞에 있어야합니다. E.G.

    .antMatchers("/admin/login").permitAll()
    .antMatchers("/admin/**").hasRole("ADMIN")
    
  2. from https://stackoverflow.com/questions/30819337/multiple-antmatchers-in-spring-security by cc-by-sa and MIT license