在Spring Integration HTTP Inbound adapter中提取Principal User

时间:2017-10-05 21:19:51

标签: spring-integration

在我的Spring Integration项目中(使用Spring Security API使用基本授权),我试图访问Principal对象以读取用户名。

这是入站网关的结构:



<int-http:inbound-gateway request-channel="gatewayRequests"
		reply-channel="gatewayResponses"
		supported-methods="POST"
		path="/api/v1/myservice"
		request-payload-type="java.lang.String" reply-timeout="100">

		<int-http:request-mapping consumes="application/xml" produces="application/xml"/>
		<int-http:header name="principal" expression="T(org.springframework.security.core.context.SecurityContextHolder).context.authentication.principal"/>
	</int-http:inbound-gateway>
&#13;
&#13;
&#13;

我在回复中得到了上述表达: Spring Integration and http inbound adapter, how do I extract a principal user?

尽管身份验证成功,但我没有看到主体 - 我的语法是否正确,期望表达式的结果映射到邮件头?

如果我要使用以下内容,而不是映射到标题,如何访问代码层中的Principal值(假设它被添加到有效负载中)?

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

有人可以帮助我吗?

此致 巴拉斯

1 个答案:

答案 0 :(得分:1)

已有一个标题如下:

.setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL,
                        servletRequest.getUserPrincipal())
发送给gatewayRequests的邮件中的

为什么这对你不起作用?

OTOH,表达也必须有效。如果你没有那个,那么你不能假设你被正确认证了......