programing

봄맞이 보안에 개미 사냥꾼이 여럿 등장합니다.

powerit 2023. 10. 30. 21:18
반응형

봄맞이 보안에 개미 사냥꾼이 여럿 등장합니다.

저는 다음과 같은 5개의 앤트매처(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)만 볼 수 있으며, 로그인 페이지는 두 개가 있습니다.

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

문제는 당신의 규칙에 따른 것이라고 생각합니다.

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

규칙의 순서가 중요하고 좀 더 구체적인 규칙이 먼저입니다.이제부터 시작되는 모든 것은/admin관리자 역할을 가진 인증된 사용자가 필요할 것입니다./admin/login경로(왜냐하면)/admin/login에 의해 이미 일치합니다./admin/**규칙(rule) 및 따라서 두 번째 규칙은 무시됩니다).

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

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

언급URL : https://stackoverflow.com/questions/30819337/multiple-antmatchers-in-spring-security

반응형