0

I am new to EJB. I am using Wildfly server.

I have session stateless Ejb as below.

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

The session ejb is packed to a server-ejb.jar and that jar is packed to .ear

I have created ejb-jar.xml and jboss-ejb3.xml inside META-INF folder in server-ejb.jar as below.

<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>

I am injecting SessionContext annotated with Resource in a non ejb class as below.

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;**

But when I am calling String user = sessionContext.getCallerPrincipal().getName();

it is returning "anonymous" always.

How can I solve this.

I want to get caller principal as TESTCONNECT.

1 Answers1

0

Hello, this seems to be an expected behavior. The only workaround I found would be to use Interceptor,so then you can propagate the information actually. Interceptors is explained here