1. RoleHierarchy
롤에 계층을 줄 수 있도록 해주는 클래스이다 빈으로 등록하면 유저의 role에 따라 지정해놓은 계층 구도가 적용된다
코드로 알아보자
부등호로 롤의 계층을 표현할 수있다
예를 들어 ROLE_A > ROLE_B > ROLE_C 로 설정해두면 ROLE_A는 B,C의 모든 권한을 갖을 수 있다 .
사용해 보자 스프링 시큐리티 config 파일에 정의해 두었다 .
RoleHierachy는 인터페이스고 RoleHierachyImpl 은 구현체이다 . RoleHierachyImpl을 생성해서 Hierarchy를 등록해 주고 리턴한다. 해당 메서드를 빈으로 등록해 두면 스프링이 인식하여 다른 설정없이 동작한다 .
2.authenticationDetailsSource 셋팅하기
authenticationDetailsSource은 authentication 에서 details에 대한 정보를 커스터 마이징하여 셋팅할 때 사용한다.
기본적으로 details에 들어가는 값은 아래 그림의 "detals"와 같다.
details에 필요한 값들을 추가하여 커스터마이징 해보자.
details에는 주로 request에 대한 정보들이 들어간다 먼저
요청 주소 IP , sessionId , login한 시간 , 요청 uri를 갖는 RequestInfo라는 Dto를 만들었다.
@Data
@AllArgsConstructor
@NoArgsConstructor
@Builder
public class RequestInfo {
private String remoteIp;
private String sessionId;
private LocalDateTime loginTime;
private String requestUri;
}
authenticationDetailsSorce 메서드의 파라미터를 보면 AuthenticationDetailsSource 를 제공해 줘야한다.
CustomAuthDetails는 AuthenticationDetailsSource를 구현하는 클래스이다 ,
AuthenticationDetailsSource는 제네릭타입으로 HttpServletRequest 와 Details를 담을 Dto의 타입이 필요하다 ,
@Component
public class CustomAuthDetails implements AuthenticationDetailsSource<HttpServletRequest , RequestInfo> {
@Override
public RequestInfo buildDetails(HttpServletRequest request) {
return RequestInfo.builder()
.remoteIp(request.getRemoteAddr())
.sessionId(request.getSession().getId())
.loginTime(LocalDateTime.now())
.requestUri(request.getRequestURI())
.build();
}
}
implementsMethod를 하면 bulidDetails 메서드를 통해 해당 HttpServletRequest 객체에서 request 정보를 뺴와 Dto에 바인딩해 생성하게 된다 . SecurityConfig 내에서 사용해야 하기 떄문에 @Component로 컴포넌트로 만들고
SecurityConfig에서 사용해보자
생성자 주입을 통해 만들어놓은 customAuthDetails(Details 정보)를 주입받았다 .
아래와 같이 authenticationDetailsSource의 파라미터로 customAuthDetails를 넘겨줬다 .
브라우져에서 다시 요청해보자
직접 정의한 details 대로 데이터가 들어 갔다.
직접 데이터를 정의할 일이 있을 수 있으니 알아두자 . 언제일까 .
'Spring Security' 카테고리의 다른 글
스프링시큐리티 공부 9 - multi filter chain 구현 (0) | 2021.07.03 |
---|---|
스프링시큐리티 공부 8 - BasicAuthenticationFilter (0) | 2021.07.01 |
스프링시큐리티 공부 5 - form 로그인 1 (0) | 2021.06.29 |
스프링시큐리티 공부 4 - 스프링 시큐리티에서의 로그인 (0) | 2021.06.27 |
스프링시큐리티 공부 3 - 스프링 시큐리티 작동방식 (0) | 2021.06.27 |