개발자

스프링 시큐리티 접근제어 문제 질문

2022년 10월 14일조회 268

스프링 시큐리티에 ​ AbstractAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( "email", null, AuthorityUtils.createAuthorityList("admin") ); 이런식으로 값을 넣어주고 ​ 컨트롤러에서 SecurityContextHolder.getContext().getAuthentication() 로 값을 뽑았을 때 [Principal="email", Credentials[PROTECTED], Authenticated=true, Granted Authorities=[admin]] ​ 이렇게 값이 잘 옵니다. ​ 문제는 시큐리티 콘피그에서 ​ http.authorizeRequests() .mvcMatchers("/offers/**").hasAuthority("admin") 으로 설정해놓았는데 offers에 접근하면 403 forbidden에러가 뜹니다.... ​ hasRole로 바꾸어도 마찬가지고요. ​ 왜 해당 에러가 발생하는지 궁금합니다. csrf().disable()도 하였습니다. ​ SecurityContextHolder.getContext().getAuthentication()에 있는 값으로 SecurityConfig에 있는 권한을 설정하는 것이 아닌가요? ​ 검색하며 시도를 해보았지만 해결되지 않아 질문합니다.

이 질문이 도움이 되었나요?
'추천해요' 버튼을 누르면 좋은 질문이 더 많은 사람에게 노출될 수 있어요. '보충이 필요해요' 버튼을 누르면 질문자에게 질문 내용 보충을 요청하는 알림이 가요.
profile picture
익명님의 질문

답변 1

커리어리 AI 봇님의 프로필 사진

403 Forbidden 에러가 발생하는 이유는 스프링 시큐리티의 접근 제어 설정에 따라 사용자가 해당 리소스에 접근할 수 있는 권한이 없기 때문입니다. 주어진 코드에서 'http.authorizeRequests().mvcMatchers("/offers/**").hasAuthority("admin")'라는 설정을 보면, "/offers/**" 경로에 대해서 "admin" 권한을 가진 사용자만 접근할 수 있도록 설정되어 있습니다. 하지만 'AbstractAuthenticationToken'을 사용하여 인증 객체를 생성할 때, 권한 정보를 "admin"으로 설정하고 있기 때문에 인증 객체에는 "admin" 권한이 포함되어 있습니다. 따라서 'SecurityContextHolder.getContext().getAuthentication()'을 통해 인증 객체를 가져올 때에는 권한 정보가 제대로 포함되어 반환됩니다. 그러나 실제로 접근하는 시점에서는 'hasAuthority("admin")' 설정에 맞게 인가(Authorization)가 이루어지는데, 사용자가 실제로 "admin" 권한을 가지고 있지 않다면 접근이 허용되지 않고 403 Forbidden 에러가 발생합니다. 따라서, 해당 에러가 발생하는 경우에는 다음과 같은 점을 확인해야 합니다: 1. 사용자가 실제로 "admin" 권한을 가지고 있는지 확인하세요. 인증 객체에 권한을 제대로 설정하였지만, 실제로 사용자에게 해당 권한이 할당되어 있지 않다면 접근이 제한됩니다. 2. 'http.authorizeRequests().mvcMatchers("/offers/**").hasAuthority("admin")' 설정 외에 다른 접근 제어 설정이 존재하는지 확인하세요. 다른 설정들이 해당 리소스에 접근을 제한하고 있을 수 있습니다. 3. 접근 제어 설정에 문제가 있다고 판단되면, 설정을 다시 확인하고 조정해보세요. 필요에 따라 'antMatchers'를 사용하여 경로 패턴을 더 세밀하게 지정할 수도 있습니다. 위의 점들을 확인하고 문제가 지속되는 경우에는 보다 구체적인 코드와 설정 내용을 제공해주시면 더 자세한 도움을 드릴 수 있습니다.

커리어리 AI 봇의 답변을 평가해 주세요!

지금 가입하면 모든 질문의 답변을 볼 수 있어요!

현직자들의 명쾌한 답변을 얻을 수 있어요.

또는

이미 회원이신가요?

목록으로
키워드로 질문 모아보기

실무, 커리어 고민이 있다면

새로운 질문 올리기

지금 가입하면 모든 질문의 답변을 볼 수 있어요!