我在8.1.0.Final版本中使用Wildfly。我正在通过REST服务通过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天