sessionContext.getCallerPrincipal()。getName()返回“匿名”

问题描述 投票:0回答:1

我是EJB的新手。我正在使用Wildfly服务器。

我有如下会话无状态Ejb。

@Stateless(name="PrintHandler")
@RunAs("TrustedExternalModule")
public class PrintHandlerBean extends ActivityBean implements PrintHandlerLocal {

会话ejb被打包到server-ejb.jar,而那个jar被打包到.ear

我在server-ejb.jar中的META-INF文件夹内创建了ejb-jar.xml和jboss-ejb3.xml,如下所示。

<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd">
  <enterprise-beans>
       <session>
        <ejb-name>PrintHandler</ejb-name>
        <security-identity>
            <run-as>
             <role-name>TrustedExternalModule</role-name>
          </run-as>
        </security-identity>
      </session>
  </enterprise-beans>
</ejb-jar>


<?xml version="1.1" encoding="UTF-8"?>
<jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee"
               xmlns="http://java.sun.com/xml/ns/javaee"
               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
               xmlns:s="urn:security:1.1"
               xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd"
               version="3.1"
               impl-version="2.0">
    <jboss:enterprise-beans>
        <session>
            <ejb-name>PrintHandler</ejb-name>
            <session-type>Stateless</session-type>
            <security-identity>
                <run-as>
                    <role-name>TrustedExternalModule</role-name>
                </run-as>
            </security-identity>
        </session>
    </jboss:enterprise-beans>   
    <assembly-descriptor>
        <s:security>
            <ejb-name>PrintHandler</ejb-name>
            <s:security-domain>other</s:security-domain>
            <s:run-as-principal>TESTCONNECT</s:run-as-principal>
        </s:security>
    </assembly-descriptor>
</jboss:ejb-jar>

我将在非ejb类中注入注有Resource的SessionContext,如下所示。

public abstract class AbstractBean {

   protected AbstractBean() {
      log = LogMgr.getFrameworkLogger();
      clsLog = LogMgr.getClassLogger(FndAbstractBean.class);
      if(clsLog.debug) {
         clsLog.debug("Created bean [&1]", getClass().getName());
      }
   }

   **@Resource
   protected SessionContext sessionContext;**

但是当我打电话给String用户= sessionContext.getCallerPrincipal()。getName();

它总是返回“匿名”。

我该如何解决。

我想将呼叫者主体作为TESTCONNECT。

jboss wildfly-8
1个回答
0
投票

Hello,这似乎是预期的行为。我发现的唯一解决方法是使用Interceptor,这样您就可以实际传播信息了。解释拦截器here

© www.soinside.com 2019 - 2024. All rights reserved.