在我的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;
我在回复中得到了上述表达: 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">
&#13;
有人可以帮助我吗?
此致 巴拉斯
答案 0 :(得分:1)
已有一个标题如下:
.setHeader(org.springframework.integration.http.HttpHeaders.USER_PRINCIPAL,
servletRequest.getUserPrincipal())
发送给gatewayRequests
的邮件中的。
为什么这对你不起作用?
OTOH,表达也必须有效。如果你没有那个,那么你不能假设你被正确认证了......