gpt4 book ai didi

java - 如何将用户主体从 HttpServletRequest 传播到 EJBContext?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:24:09 25 4
gpt4 key购买 nike

我在 8.1.0.Final 版本中使用 Wildfly。我正在以如下方式通过休息服务使用 HttpServletRequest 进行身份验证。

@Context
HttpServletRequest request;
...
request.login(user, password);

然后,我就可以使用 request.getUserPrincipal() 获取已记录的用户主体;

但是来自 web 层的登录身份不会传播到 ejb 层。如果我试图从 ejb bean 获取用户主体,则用户主体始终是“匿名的”:

@Stateless
@SecurityDomain("other")
@PermitAll
public class FooBean implements Foo {

@Resource
private EJBContext ejbContext;

public void someMethod() {
String name = ejbContext.getCallerPrincipal().getName();
}
}

是否有任何方法可以将记录的用户主体从 web 层传递到 ejb 上下文?

最佳答案

我总是在 Wildfly 8.0.0.Final 上收到 Anonymous CallerPricipal 或 null UserPrincipal,直到我应用了补丁以移动到 Wildfly 8.1.0.Final 并且一切都很好。

我们项目之间唯一明显的区别是,我没有使用 @SecurityDomain,而是使用 xml 来避免代码中的供应商细节。我建议您重新检查使用该注释的要求或试用 xml 并查看您是否仍然有问题

我的 jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>  
<jboss>
<security-domain>myJaasSecurityDomain</security-domain>
</jboss>

我的 web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">

<security-role>
<role-name>ADMIN</role-name>
</security-role>
<security-role>
<role-name>CUSTOMER</role-name>
</security-role>

</web-app>

希望下一个人不会像我一样在这上面花 2 天时间

关于java - 如何将用户主体从 HttpServletRequest 传播到 EJBContext?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24432897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com