> Java > java지도 시간 > Spring Security가 사용자 역할에 따라 액세스를 적절하게 제한할 수 없는 이유는 무엇입니까?

Spring Security가 사용자 역할에 따라 액세스를 적절하게 제한할 수 없는 이유는 무엇입니까?

Susan Sarandon
풀어 주다: 2024-12-13 21:56:17
원래의
881명이 탐색했습니다.

Why Can't Spring Security Properly Restrict Access Based on User Roles?

Spring Security의 역할 문제 해결

문제:

Spring Security를 프로젝트에서는 "사용자" 역할만 가진 사용자가 관리자별 리소스에 액세스할 수 있는 것으로 관찰되었습니다. 의심되는 문제는 사용자 인증 쿼리에 있습니다.

분석:

구성에서는 인메모리와 JDBC 기반 인증을 모두 시도합니다. 권한 검색에 대한 쿼리는 "users_username=?인roles_users에서 users_username,roles_id를 선택"으로 구성됩니다. 역할 앞에는 "ROLE_"이 붙습니다.

원인:

그러나 문제는 인증 일치자 순서의 논리적 오류로 인해 발생합니다. 일치자 "anyRequest().authenticated()"가 "antMatchers("/users/all").hasRole("admin")" 앞에 잘못 배치되어 역할에 관계없이 모든 인증된 사용자 액세스를 허용합니다.

해결책:

이 문제를 해결하려면 명령을 따르도록 승인 규칙을 재구성해야 합니다. Spring Security 문서에 명시되어 있습니다. 아래 수정된 구성은 오류를 수정합니다.

1

2

3

4

5

6

7

8

9

10

11

12

13

14

@Override

protected void configure(HttpSecurity http) throws Exception {

    http

        .csrf().disable()     

        .httpBasic()

            .and()

        .authorizeRequests()

            .antMatchers("/users/all").hasRole("admin")

            .anyRequest().authenticated()

            .and()

        .formLogin()

            .and()

        .exceptionHandling().accessDeniedPage("/403");

}

로그인 후 복사

이 수정을 통해 "admin" 역할을 가진 사용자에게만 "/users/all"에 대한 액세스 권한이 부여되고 관리자가 아닌 사용자는 액세스가 제한됩니다. 보호된 리소스에 액세스합니다.

위 내용은 Spring Security가 사용자 역할에 따라 액세스를 적절하게 제한할 수 없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿