Spring Security 제어 권한 부여 방법

본 고 는 Spring Security 제어 권한 수여 방법 을 소개 하고 여러분 에 게 공유 합 니 다.구체 적 으로 다음 과 같 습 니 다.
권한 수여 방법 을 사용 하여 권한 수여 설정 을 진행 합 니 다.
모든 Spring Security 제어 권한 수여 식(이하 표현 식 으로 약칭)은 실제 API 에서 권한 수여 방법 에 대응 합 니 다.이 방법 은 요청 한 URL 권한 설정 시 처리 방법 입 니 다.예 를 들 면:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests()
    .antMatchers(HttpMethod.DELETE, "/user/*").hasRole("ADMIN")
    .antMatchers("/index").permitAll()
    .antMatchers("/pay").hasAnyRole("WE_CHAT_PAY", "ALI_PAY")
    .antMatchers("/debug").hasIpAddress("192.168.1.0/24");
}
다 중 권한 요청 권한 부여 표현 식 사용
그렇다면 표현 식 으로 권한 수여 처 리 를 언제 해 야 합 니까?안전 한 응용 권한 에 대한 요 구 는 복잡 하고 다양 하 다.예 를 들 어 프로젝트 의 디 버 깅 요청 은 방문 자 에 게 관리자 권한 을 가 져 야 할 뿐만 아니 라 회사 내부 랜 내부 방문 도 해 야 한다.이러한 수요 에서 Security API 를 통 해 제공 하 는 방법 만 으로 는 만족 할 수 없습니다.이러한 권한 수여 방법 은 연속 적 으로 호출 할 수 없 기 때 문 입 니 다.
이 때 인증 식 으로 해결 할 수 있 습 니 다:

@Override
protected void configure(HttpSecurity http) throws Exception {
  http.authorizeRequests()
    .antMatchers("/debug")
      .access("hasRole('ADMIN') and hasIpAddress('192.168.1.0/24')");
}
권한 부여 식 예시 설명
표현 식
설명 하 다.
permitAll
영원히
denyAll
영원히 false 로 돌아 가기
anonyous
현재 사용자 가 익명 사용자 라면 true 로 돌아 갑 니 다.
rememberMe
현재 사용자 가 rememberme 사용자 라면 true 로 돌아 갑 니 다.
authenticated
현재 사용자 가 익명(인 증 된)사용자 가 아니라면 true 로 돌아 갑 니 다.
fullAuthenticated
현재 사용자 가 익명 사용자 도 remembeMe 사용자 도 아니라면 true 로 돌아 갑 니 다.
hasRole(role)
현재 사용자 권한 집합 에서 지정 한 role 캐릭터 권한 이 있 으 면(일치 할 때 지정 한 권한 앞 에'ROLE'을 추가 합 니 다."ROLE"가 있 는 지 판단 하 는 것 이다.role"권한)시 true 되 돌리 기
hasAnyRole(role1, role2, ...)
현재 사용자 권한 집합 중 임의의 캐릭터 권한 이 있 을 때 true 로 돌아 갑 니 다.
hasAuthority(authority)
현재 사용자 권한 집합 에 authority 권한 이 있 을 때 true 로 돌아 갑 니 다.
hasAnyAuthority(authority)
현재 사용자 권한 집합 중 임의의 권한 이 있 을 때 true 로 돌아 갑 니 다.
hasIpAddress("192.168.1.0/24")
요청 한 IP 를 보 낼 때 fanhui true
역할 기반 접근 제어 RBAC(Role-Based Access Control)
아마도 당신 은 상술 한 방식 이 절대 다수의 응용 안전 권한 수여 관 리 를 만족 시 킬 수 있다 고 생각 할 것 이다.그러나 사실상 기업 급 응용의 권한 수 여 는 데이터베이스 데이터 의 동태 적 인 변 화 를 바탕 으로 한다.만약 에 상술 한 방식 으로 문자열 을 연결 하면 개발 자 에 게 매우 우호 적 이지 않 을 뿐만 아니 라(매번 인원 변동 은 코드 를 고 쳐 야 한 다 는 것 을 의미 하고 분명히 불합리 하 다)사용 해 야 할 성능 도 떨어진다.그렇다면 어떻게 해결 할 것 인가?
데이터 모델
통용 되 는 RBAC 데이터 모델 은 보통 다섯 장의 표(실체 표 세 장,관계 표 두 장)가 필요 하 다.세 장의 실체 표 는 사용자 표,역할 표,자원 표를 포함한다.관계 표 두 장 포함.그 사이 의 관 계 는 다음 과 같다.

RBAC 데이터 모델
사용자 테이블
모든 사용 자 는 반드시 사용자 표 가 있어 야 한다.회사 가 인원 변동 이 발생 할 때 업무 인원(예 를 들 어 인적자원)이 이 데이터 표를 첨삭 하여 기록 해 야 한다.
역할 표
회 사 는 어떤 신분 의 사람 이 있 습 니까?예 를 들 어 회장,부회장,부서 장 등 업무 인원 이 회사 의 구체 적 인 상황 에 따라 이 표 데 이 터 를 조작 합 니까?
자원 표
권한 제 어 를 해 야 하 는 자원 을 저장 합 니 다.저희 가 제어 권한 수 여 를 할 때 실제 URL 을 기반 으로 하지만 업무 자 는 URL 에 따라 데이터 항목 을 구성 하지 않 고 보기 인터페이스의 형식 으로 조 작업 을 합 니 다.그래서 이 표 에는 업무 자 에 게 보 여 주 는 메뉴,버튼 과 권한 제어 URL 이 저 장 됩 니 다.
사용자 역할 관계 표
사용자 시트 와 캐릭터 시트(사용자 id 와 캐릭터 id)는 다 중 관계 입 니 다.한 사용 자 는 여러 개의 역할(한 사용 자 는 부서 매니저 일 수도 있 고 특정한 관리자 일 수도 있다)일 수 있 으 며,한 역할 은 여러 사용자 에 게 대응 할 수 있다.
역할―자원 관계 표
역할 표 와 자원 표()도 다 대 다 의 관계 이다.한 캐릭터 가 여러 자원(단추 나 메뉴 등)에 접근 할 수 있 고,한 자원 도 여러 캐릭터 에 접근 할 수 있다.
spring security 는 사용자 정의 표현 식 을 지원 합 니 다.이렇게
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기