sessionContext.getCallerPrincipal (). getName () возвращает «анонимный» - PullRequest
0 голосов
/ 05 апреля 2020

Я новичок в EJB. Я использую сервер Wildfly.

У меня EJB без сохранения состояния сеанса, как показано ниже.

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

EJB сеанса упакован в server-ejb.jar, а этот jar - в .ear

Я создал ejb-jar. xml и jboss-ejb3. xml внутри папки META-INF в server-ejb.jar, как показано ниже.

<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 с пометкой Resource в не-ejb-классе, как показано ниже.

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.

1 Ответ

0 голосов
/ 06 апреля 2020

Hello, это, кажется, ожидаемое поведение. Единственный обходной путь, который я нашел, - это использование Interceptor, чтобы вы могли распространять информацию на самом деле. Перехватчики объясняются здесь

...