2017-10-05 7 views
0

Springインテグレーションプロジェクト(基本認証を使用するSpringセキュリティAPIを使用)で、ユーザ名を読み取るためにプリンシパルオブジェクトにアクセスしようとしています。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?

を、私は「ドンプリンシパルを参照してください - 式の結果がメッセージヘッダーにマップされることを期待していますが正しいですか?

ヘッダーへのマッピングの代わりに、次のコードを使用する場合、コードレイヤーのプリンシパル値にアクセスするにはどうすればよいですか(ペイロードに追加されたと仮定します)。

<payload- 
 
expression="T(org.springframework.security.core.context.SecurityContextHolder). 
 
context.authentication.principal">

誰もが親切に私を助けることができますか?よろしくお願いいたし

バーラト

答えて

1

等ヘッダ既に存在し:gatewayRequestsに送信されたメッセージで

.setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL, 
         servletRequest.getUserPrincipal()) 

は。

なぜそれがうまくいかないのですか?

OTOHでもその表現は機能しなければなりません。あなたがそれを持っていなければ、あなたはあなたが正しく認証されたと仮定できません...

+0

"gatewayRequests"を聞いているServiceActivatorの中で、私は2つのアプローチを試しました:アプローチ1:Authentication authentication = SecurityContextHolder.getContext ).getAuthentication();文字列callerUserName = authentication.getName();アプローチ2:プリンシパルプリンシパル=(プリンシパル)incomingMessage.getHeaders()。get( "USER_PRINCIPAL");文字列callerUserName = principal.getName();これらの中で、アプローチ1は働いたがアプローチ2はそうしなかった。つまり、ユーザーは認証されましたが、なぜUSER_PRINCIPALに何も含まれていないのか分かりません。 – bmylavar

+0

これは 'USER_PRINCIPAL'リテラルではありません。これは '.HttpHeaders.USER_PRINCIPAL'定数です。さて、あなたは間違いなくあなたがメッセージ内にあるすべてのヘッダーをチェックすることができます。たとえば、ログに記録してください。 –

+0

パーフェクト!あなたのアドバイスで、私はすべてのヘッダーを記録し、値 "http_userPrincipal"が利用可能であり、これがHttpHeaders.USER_PRINCIPAL定数の値でもあることを確認しました。 – bmylavar

関連する問題