inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

스프링 시큐리티

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

344

김현진

작성한 질문수 8

0

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 연동 자체를 사용할 수 없을 것 같아요ㅠ

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

 

 

 

 

java spring-boot spring-security

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

0

김현진

감사합니다. 선생님..

시큐리티 공부 버전 질문

0

175

1

[해결 방법] MethodSecurityConfig.customMethodSecurityMetadataSource() 호출하지 않는 이슈

0

186

1

AbstractSecurityInterceptor.class.beforeInvocation()를 2번 실행하는 경우

0

174

1

강의 코드가 왜이렇게 뒤죽박죽인가요...

0

249

1

메인 페이지로 접속해도 login url로 리다이렉트가 되지 않습니다..

0

236

1

파라미터값이 넘어가지 않습니다 ....

0

374

1

security filterChain 설정 질문이 있습니다.

0

332

1

소스 부분 질문 드립니다.

0

208

2

섹션4 7번 강의 문제가 있는거 같네요.

0

344

2

파일이 수시로 이름이 바껴있네요 ㄷㄷ

0

304

1

HttpSessionSecurityContextRepository를 사용안하는 문제

0

555

2

error , exception 이 잘 안됩니다.

0

282

2

thymeleaf tag 질문합니다.

0

196

2

버전업하면서 deprecated된 것들이 너무많아요

0

478

1

spring security 패치 관련

0

437

1

모바일을 사용할때 토큰말고 세션

0

846

2

DB 연동한 인가 부분에 대한 질문입니다!

0

264

1

Ajax방식도 똑같이 Session방식을 사용하는건가요?

0

307

1

Config 파일 생성 시 질문이 있습니다.

0

225

1

강사님 몇일동안 구글 검색만 100개 했는데도 이유를 모르겠습니다..

1

429

2

403 에러 뜹니다.

0

813

2

login_proc의 존재에 대한 간략한 설명입니다

0

276

1

top.html에 로그인 링크를 만들어서 로그인을 해봤습니다

0

283

2

안녕하세요. DB에 저장될 때 이해 안 가는 값이 있어서 질문드립니다!

0

189

1