23.05.20 21:28 작성
·
364
·
수정됨
0
섹션 5. 웹 기반 인가처리 DB 연동에서 AffirmativeBased 를 생성해서 사용할 때 AccessDeniedException 발생 시 메시지가 한글로 변환되는 현상
위 질문 내용 해결한 것 같아요.
선생님.. 맞는지만 봐주세요.
스프링시큐리티가 초기화 될 때 ApplicationContextAwareProcessor 클래스의 invokeAwareInterfaces() 메소드에서 내부적으로 사용하는 AffirmativeBased 의 setMessageSource(this.applicationContext); 를 호출하네요. applicationContext는 ConfigurableApplicationContext 클래스로 선언되어 있습니다.
그래서 security/configs/SecurityConig 에서 동일하게 선언을 하고
@Autowired
ConfigurableApplicationContext applicationContext;
setMessageSource() 에 전달했습니다.
private AccessDecisionManager affirmativeBased() {
AffirmativeBased affirmativeBased = new AffirmativeBased(getAccessDecisionVoters());
affirmativeBased.setMessageSource(this.applicationContext);
return affirmativeBased;
}
그러니 메시지가 한글로 변환되지 않고 영문으로 잘 나오네요.
그리고 applicationContext 가 동일한 객체이냐 가 궁금해서 디버깅을 해보면 먼저 SecurityConfig에서 AffirmativeBased 생성을 먼저 시작하는데 이때 applicationContext 는 디버깅 창에서 applicationContext = {AnnotationConfigServletWebServerApplicationContext@9659} "org.springframework.boot.web.servlet.context.AnnotationConfigSevletWebServerApplicationContext@6ae4b437, ..." 이렇게 표현됩니다.
그 다음 ApplicationContextAwareProcessor 의 invokeAwareInterfaces() 가 호출되는데.
여기서 120줄 에서 break point 잡고 this.applicationContext 을 디버깅 해보면
this.applicationContext = {AnnotationConfigServletWebServerApplicationContext@9659} "org.springframework.boot.web.servlet.context.AnnotationConfigSevletWebServerApplicationContext@6ae4b437, ..." 로 동일하네요. 맞는 것 같은데..
이렇게 구현하면 되는지요?
2023. 05. 20. 22:12
이렇게 구현한 게 맞는지요?
감사합니다.