0
스프링 통합 프로젝트 (기본 인증을 사용하는 스프링 보안 API 사용)에서 사용자 이름을 읽으려면 Principal 객체에 액세스하려고합니다.Spring 통합에서 주 사용자 추출 HTTP 인바운드 어댑터
<int-http:inbound-gateway request-channel="gatewayRequests"
\t \t reply-channel="gatewayResponses"
\t \t supported-methods="POST"
\t \t path="/api/v1/myservice"
\t \t request-payload-type="java.lang.String" reply-timeout="100">
\t \t <int-http:request-mapping consumes="application/xml" produces="application/xml"/>
\t \t <int-http:header name="principal" expression="T(org.springframework.security.core.context.SecurityContextHolder).context.authentication.principal"/>
\t </int-http:inbound-gateway>
나는이에 응답에서 상기 발현 가지고 : 인증에 성공에도 불구하고 Spring Integration and http inbound adapter, how do I extract a principal user?
을, 나는 '돈
이
는 수신 게이트웨이의 구조 교장 선생님 - 메시지 헤더에 매핑되는 표현식의 결과를 예상 할 때 올바른 구문일까요?헤더에 매핑하는 대신 다음 코드를 사용하면 코드 계층의 Principal 값에 액세스하는 방법 (페이로드에 추가된다고 가정)은 어떻게됩니까?
<payload-
expression="T(org.springframework.security.core.context.SecurityContextHolder).
context.authentication.principal">
는 사람이 친절하게 도와 드릴까요? 감사합니다
, 바라 스
"gatewayRequests"를 듣는 ServiceActivator 내부에서, 나는 2 가지 접근법을 시도했습니다 : 접근 인증 1 = SecurityContextHolder.getContext () .getAuthentication(); String callerUserName = authentication.getName(); 접근법 2 : 주체 주체 = (주체) incomingMessage.getHeaders(). get ("USER_PRINCIPAL"); String callerUserName = principal.getName(); 이 중 Approach 1은 작동했지만 Approach 2는 작동하지 않았습니다. 즉, 사용자는 인증되었지만 USER_PRINCIPAL에 아무 것도 포함되지 않은 이유를 모르겠습니다. – bmylavar
그것은 'USER_PRINCIPAL' 리터럴이 아닙니다. 그것은'.HttpHeaders.USER_PRINCIPAL' 상수입니다. 글쎄, 당신은 확실히 당신이 메시지에있는 모든 헤더를 확인할 수 있습니다. 예를 들어, 로그인하십시오. –
완벽! 귀하의 조언에 따라 모든 헤더를 기록하고 "http_userPrincipal"값을 사용할 수 있었고 HttpHeaders.USER_PRINCIPAL 상수 값이기도하다는 것을 알았습니다. – bmylavar