Ejb propagation

Run
How to run the sample
The source code for this sample can be found in the javaee7-samples GitHub repository. The first thing we need to do is to get the source by downloading the repository and then go into the samples folder:
git clone git://github.com/javaee-samples/javaee7-samples.git
cd javaee7-samples/jaspic/ejb-propagation/
Now we are ready to start testing. You can run all the tests in this sample by executing:
mvn test
Or you can run individual tests by executing one of the following:
mvn test -Dtest=ProtectedEJBPropagationTestmvn test -Dtest=PublicEJBPropagationTest

ProtectedEJBPropagationTest

This tests that the established authenticated identity propagates correctly from the web layer to a "protected" EJB (an EJB with declarative role checking).

Missing a description for the deployment. Add some javadoc to the @Deployment method. Show me how!
@Deployment(testable = false)
public static WebArchive createDeployment() {
    return defaultArchive();
}
Missing a description for the test scenario. Add some javadoc to the @Test method. Show me how!
@Test
public void testProtectedServletWithLoginCallingEJB() throws IOException, SAXException {

    String response = getFromServerPath("protected/servlet-protected-ejb?doLogin");

    // Both the web (HttpServletRequest) and EJB (EJBContext) should see the same
    // user name.
    assertTrue(response.contains("web username: test"));
    assertTrue("Web has user principal set, but EJB not.", response.contains("EJB username: test"));

    // Both the web (HttpServletRequest) and EJB (EJBContext) should see that the
    // user has the role "architect".
    assertTrue(response.contains("web user has role \"architect\": true"));
    assertTrue("Web user principal has role \"architect\", but one in EJB doesn't.",
            response.contains("EJB user has role \"architect\": true"));
}

A small variation on the testProtectedServletWithLoginCallingEJB that tests if for authentication that happened for public resources the security context also propagates to EJB.

@Test
public void testPublicServletWithLoginCallingEJB() throws IOException, SAXException {

    String response = getFromServerPath("public/servlet-protected-ejb?doLogin");

    // Both the web (HttpServletRequest) and EJB (EJBContext) should see the same
    // user name.
    assertTrue(response.contains("web username: test"));
    assertTrue("Web has user principal set, but EJB not.", response.contains("EJB username: test"));

    // Both the web (HttpServletRequest) and EJB (EJBContext) should see that the
    // user has the role "architect".
    assertTrue(response.contains("web user has role \"architect\": true"));
    assertTrue("Web user principal has role \"architect\", but one in EJB doesn't.",
            response.contains("EJB user has role \"architect\": true"));
}

PublicEJBPropagationTest

This tests that the established authenticated identity propagates correctly from the web layer to a "public" EJB (an EJB without declarative role checking).

Missing a description for the deployment. Add some javadoc to the @Deployment method. Show me how!
@Deployment(testable = false)
public static WebArchive createDeployment() {
    return defaultArchive();
}
Missing a description for the test scenario. Add some javadoc to the @Test method. Show me how!
@Test
public void testProtectedServletWithLoginCallingEJB() throws IOException, SAXException {

    String response = getFromServerPath("protected/servlet-public-ejb?doLogin");

    // Both the web (HttpServletRequest) and EJB (EJBContext) should see the same
    // user name.
    assertTrue(response.contains("web username: test"));
    assertTrue("Web has user principal set, but EJB not.", response.contains("EJB username: test"));
}

Share the Knowledge

Find this sample useful? Share on

There's a lot more about JavaEE to cover. If you're ready to learn more, check out the other available samples.

Help Improve

Find a bug in the sample? Something missing? You can fix it by editing the source, making the correction and sending a pull request. Or report the problem to the issue tracker

Recent Changelog

  • Jan 11, 2014: Replaced httpunit by htmlunit, added convenience method for getting raw by arjan tijms
  • Jan 07, 2014: Add jboss-web.xml to web deployments by Stefan Guilhen
  • Dec 10, 2013: Port of jaspic tests from by arjan tijms
How to help improve this sample
The source code for this sample can be found in the javaee7-samples GitHub repository. The first thing you need to do is to get the source by downloading the repository and then go into the samples folder:
git clone git://github.com/javaee-samples/javaee7-samples.git
cd javaee7-samples/jaspic/ejb-propagation/

Do the changes as you see fit and send a pull request!

Good Luck!