스프링 프레임워크를 활용한 시큐리티 적용시, 내가 들어가고자 하는 해당 타겟에 접근 가능한 권한이 설정되어 있다면 설정된 권한 이외에 접근은 불가능하다. 예를 들어, '회원'과 '관리자'만 접근 가능한 타겟이 존재한다면 해당 타겟은 각 권한을 가진 사용자이여야만 접근이 가능할 것이다. 그 외에 다른 권한을 가진 사용자라면 접근이 불가하겠다. 이와 같이 타겟에 설정되어 있는 권한 이외에 다른 권한을 가진 사용자가 접근 시 발생하는 에러가 'Access is denied'에러와 같은 접근 거부 에러이다.
Access is denied
에러 해결 방법
첫번째, 타겟(목적지)에 설정되어 있는 권한과 동일한 사용자 계정으로 접근한다.
@PreAuthorize 어노테이션을 통해 타겟으로 접근 전, 인증이 진행되어야하고 hasAnyRole에 설정되어 있는 'MEMBER'와 'ADMIN' 권한만 접근 가능하도록 타겟이 설정되어 있다. 그렇기 때문에 'MEMBER'와 'ADMIN' 권한을 갖고 있는 사용자 계정으로 접근한다면 문제가 없겠다.
두번째, 시큐리티 설정을 확인합니다.
시큐리티 설정에는 차이가 있을 수 있습니다. 클래스를 기반으로 @Configuration을 이용하여 설정하는 방식이 있고 xml파일을 이용하여 설정하는 방식이 있는데 후자에 방법으로 설정되어 있는 내용으로 설명하고 있습니다. 시큐리티 설정을 확인했을때 필터 기반으로 동작하고 있는 시큐리티가 필터로부터 잘 동작하고 있는지 해당 구조가 설정부분에서부터 잘 적용되어 있는지를 확인합니다.
세번째, 지극히 정상적인 메세지인 경우도 존재합니다.
권한이 설정되어 있는 타겟으로 접근 시, 로그인 인증 페이지가 나타나는데 이때, 에러 메세지로 'Access is denied (user is anonymous)'와 같은 에러가 발생할 수 있습니다. 해당 에러 메세지는 스프링 프레임워크 공식 문서에서 설명하길 '이는 익명 사용자가 보호된 리소스에 처음으로 액세스하려고 할 때 발생하는 디버그 수준 메세지입니다.' 라고 가이드하고 있으며, 이는 정상적인 현상이며 걱정할 필요가 없다라고 까지 설명하고 있습니다.
우리가 만나는 에러 대부분은 오타이거나 설정에 문제가 있거나 원론적인 구조에서 잘못됬거나 등등 다양한 상황이 존재하지만, 발생하고 있는 에러의 메세지를 통해서 각 상황을 유추해가면서 찾아보면 해결할 수 있는 범위의 폭을 줄일 수 있다.
@Junesker
댓글