• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

섹션 5. 웹 기반 인가처리 DB 연동에서 AffirmativeBased 를 생성해서 사용할 때 AccessDeniedException 발생 시 메시지가 한글로 변환되는 현상

23.05.14 17:31 작성 조회수 202

0

  • AffirmativeBased 객체에 대한 질문

https://www.inflearn.com/questions/327562/affirmativebased-%EA%B0%9D%EC%B2%B4%EC%97%90-%EB%8C%80%ED%95%9C-%EC%A7%88%EB%AC%B8%EC%9E%85%EB%8B%88%EB%8B%A4

  • 한글 인코딩 오류

https://www.inflearn.com/questions/52731/%ED%95%9C%EA%B8%80-%EC%9D%B8%EC%BD%94%EB%94%A9-%EC%98%A4%EB%A5%98

위 내용 모두 동일 내용이네요.

ch05-03 에서 섹션5와 섹션 6까지 많은 것을 구현하셔서 해당 내용에 대한 branch가 없네요. 선생님 github의 ch05-03a branch 에서 재현 되네요. 이 브랜치가 섹션 5에서 섹션 6까지 모두 구현된 소스 같아요.

ch05-03a branch 의 application.properties 에서 spring.profiles.active=pointcut 를 주석 처리 후 실행 시키면 실행이 되고 user 로 로그인한 다음에 메시지 페이지에 접근하면 재현 됩니다.

AffirmativeBased 클래스의 84번 줄에 break point 잡고 디버깅하면 messages.getMessage() 호출 후 AccessDeniedException 을 생성하여 throw 될 때 detailMessage를 보면 "Access is denied" 이 "접근이 거부되었습니다" 라고 변경되어 저장되네요.

왜 locale 문제가 발생하는지 잘 모르겠네요. 저는 영문으로 사용해야 하는데 이 원인이 해결되지 않으면 자원 관리에 대한 DB 연동 자체를 사용할 수 없을 것 같아요ㅠ

선생님 왜 그런지 도와주세요.

 

 

 

 

답변 1

답변을 작성해보세요.

1

저도 소스를 들여다 보면서 테스트 하고 있는데 기본적으로 LOCALE 이 ko_KR 로 되어 있어서 영문이 아닌 한글 메시지를 가지고 오고 있는데 이 부분을 변경하기 위해 시큐리티에서 별도의 API 를 제공하는지는 좀 더 봐야 할 것 같습니다.

한가지 발견한 것은 AffirmativeBased 클래스에서 setMessageSource() API 를 제공하고 있긴 한데 여기시 바로 LOCALE 를 변경할 수 있는 것은 아니었습니다.

아마 스프링 부트가 초기화 때 설정한 값을 그대로 사용하고 있는 것 같습니다.

public abstract class AbstractAccessDecisionManager
implements AccessDecisionManager, InitializingBean, MessageSourceAware {

protected MessageSourceAccessor messages = SpringSecurityMessageSource.getAccessor();

@Override
public void setMessageSource(MessageSource messageSource) {
this.messages = new MessageSourceAccessor(messageSource);
}

중략...

}

위 코드를 보시면 MessageSource 를 변경할 수 있는 메서드가 있습니다.

또 속성 중에 MessageSourceAccessor 가 있는데 이 클래스에서 LOCALE(ko_KR) 정보를 받아서 메시지를 출력해 주고 있습니다.

예측하기는 스프링 부트가 초기화 되면서 위 클래스들이 어떤 특정한 시점에 LOCALE 정보를 받아 실행하도록 되어 있을 것 같은데 이 부분을 어떤 방식으로 커스텀하게 변경하거나 설정할 수 있는지를 좀 더 살펴 봐야 할 것 같습니다.

스프링에서 LOCALE 설정 변경은 구글 검색을 하면 여러 참조할 수 있는 내용이 나오는데 샘플 코드를 일부 적용을 했는데 반영이 되지 않고 있어서 저도 조금 더 분석해보고 해결점이 찾아지면 다시 답변 드리도록 하겠습니다.

김현진님의 프로필

김현진

질문자

2023.05.16

감사합니다. 선생님..