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

时间:2014-06-26 14:15:04

标签: java web-services jboss ejb wildfly

我在版本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上下文?

1 个答案:

答案 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天时间