작성
·
337
답변 2
0
RequestMatcherDelegatingAuthorizationManager
클래스의 check 메서드에서 breakpoint 를 잡고 디버깅해보시는 것을 추천드립니다.
@Override
public AuthorizationDecision check(Supplier<Authentication> authentication, HttpServletRequest request) {
if (this.logger.isTraceEnabled()) {
this.logger.trace(LogMessage.format("Authorizing %s", request));
}
for (RequestMatcherEntry<AuthorizationManager<RequestAuthorizationContext>> mapping : this.mappings) {
RequestMatcher matcher = mapping.getRequestMatcher();
MatchResult matchResult = matcher.matcher(request);
if (matchResult.isMatch()) {
AuthorizationManager<RequestAuthorizationContext> manager = mapping.getEntry();
if (this.logger.isTraceEnabled()) {
this.logger.trace(LogMessage.format("Checking authorization on %s using %s", request, manager));
}
return manager.check(authentication,
new RequestAuthorizationContext(request, matchResult.getVariables()));
}
}
if (this.logger.isTraceEnabled()) {
this.logger.trace(LogMessage.of(() -> "Denying request since did not find matching RequestMatcher"));
}
return DENY;
}
spring security 의 authorizeHttpRequests 에 설정한 값들이 RequestMatcherDelegatingAuthorizationManager
클래스의 멤버변수 mappings 에 저장됩니다.
위의 check 메서드에서 mappings 를 순회하며 요청이 유효한지를 체크하게 되는데 403 Access Denied 가 발생하는 이유를 위 과정에서 확인할 수 있을 것으로 생각됩니다.
0