Spring Security의 역할 문제 해결
문제:
Spring Security를 프로젝트에서는 "사용자" 역할만 가진 사용자가 관리자별 리소스에 액세스할 수 있는 것으로 관찰되었습니다. 의심되는 문제는 사용자 인증 쿼리에 있습니다.
분석:
구성에서는 인메모리와 JDBC 기반 인증을 모두 시도합니다. 권한 검색에 대한 쿼리는 "users_username=?인roles_users에서 users_username,roles_id를 선택"으로 구성됩니다. 역할 앞에는 "ROLE_"이 붙습니다.
원인:
그러나 문제는 인증 일치자 순서의 논리적 오류로 인해 발생합니다. 일치자 "anyRequest().authenticated()"가 "antMatchers("/users/all").hasRole("admin")" 앞에 잘못 배치되어 역할에 관계없이 모든 인증된 사용자 액세스를 허용합니다.
해결책:
이 문제를 해결하려면 명령을 따르도록 승인 규칙을 재구성해야 합니다. Spring Security 문서에 명시되어 있습니다. 아래 수정된 구성은 오류를 수정합니다.
@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 중국어 웹사이트의 기타 관련 기사를 참조하세요!