> Java > java지도 시간 > 데이터베이스 역할 할당에도 불구하고 Spring 보안 역할 기반 액세스 제어가 실패하는 이유는 무엇입니까?

데이터베이스 역할 할당에도 불구하고 Spring 보안 역할 기반 액세스 제어가 실패하는 이유는 무엇입니까?

Patricia Arquette
풀어 주다: 2024-12-10 09:29:19
원래의
363명이 탐색했습니다.

Why Does My Spring Security Role-Based Access Control Fail Despite Database Role Assignments?

Spring Security에서 잘못된 역할 검사 해결

Spring Security에서 권한 구성을 구성하면 예상치 못한 역할 검사가 발생할 수 있습니다. 제공된 코드 조각에 강조 표시된 문제를 해결해 보겠습니다.

@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
    // ...
    auth
        .jdbcAuthentication()
            .dataSource(dataSource)
            .usersByUsernameQuery("select username, password, 1 from users where username=?")
            .authoritiesByUsernameQuery("select users_username, roles_id  from roles_users where users_username=?")
            .rolePrefix("ROLE_");
}

@Override
protected void configure(HttpSecurity http) throws Exception {
    // ...
    http
        .csrf().disable();      
    http
        .httpBasic();
    http
        .authorizeRequests()
            .anyRequest().authenticated();
    http
        .authorizeRequests()
            .antMatchers("/users/all").hasRole("admin")
            .and()
        .formLogin();
    http
        .exceptionHandling().accessDeniedPage("/403");
}
로그인 후 복사

문제:

"USER" 역할만 가진 사용자가 로그인하면 다음을 수행할 수 있습니다. "관리자" 역할로 보호되는 리소스에 액세스합니다. 문제는 "users" 테이블의 사용자 이름 열에 대한 기본 키 제약 조건에 있습니다.

해결책:

제공된 쿼리 "select username,password , 1 username=?" 사용자의 역할에 관계없이 항상 단일 행을 반환하므로 부적절합니다. 이를 통해 사용자는 데이터베이스에 부여되지 않은 경우에도 원하는 역할을 맡을 수 있습니다.

이 문제를 해결하려면 사용자의 역할을 반환하도록 쿼리를 업데이트해야 합니다.

.usersByUsernameQuery("select username, password, role from users where username=?")
로그인 후 복사

추가 참고:

인증 구성에서 일치자의 순서가 중요합니다. 다음 매처 "anyRequest().authenticated()는 인증된 사용자만 애플리케이션에 액세스할 수 있도록 antMatchers("/users/all").hasRole("admin") 앞에 와야 합니다.

위 내용은 데이터베이스 역할 할당에도 불구하고 Spring 보안 역할 기반 액세스 제어가 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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