首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >sessionContext.getCallerPrincipal().getName()返回“匿名”

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

Stack Overflow用户
提问于 2020-04-05 13:34:06
回答 1查看 280关注 0票数 0

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

我有如下所示的会话无状态Ejb。

代码语言:javascript
复制
@Stateless(name="PrintHandler")
@RunAs("TrustedExternalModule")
public class PrintHandlerBean extends ActivityBean implements PrintHandlerLocal {

session ejb被打包到server-ejb.jar,而jar被打包到.ear

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

代码语言:javascript
复制
<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>

我将资源注解的SessionContext注入到一个非ejb类中,如下所示。

代码语言:javascript
复制
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 user = sessionContext.getCallerPrincipal().getName();时

它总是返回“匿名”。

我怎么才能解决这个问题。

我想让调用主体作为TESTCONNECT。

EN

回答 1

Stack Overflow用户

发布于 2020-04-06 06:29:57

Hello,这似乎是意料之中的行为。我发现唯一的解决办法是使用Interceptor,这样你就可以实际传播信息了。拦截器的解释是here

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61038476

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档