我在版本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上下文?
答案 0 :(得分:2)
我总是在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天时间