/*
* JBoss, Home of Professional Open Source.
* Copyright 2008, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss.test.jca.securedejb;
import java.rmi.RemoteException;
import java.sql.Connection;
import java.sql.SQLException;
import java.security.Principal;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.EJBException;
import javax.naming.InitialContext;
import javax.naming.directory.DirContext;
import javax.sql.DataSource;
import org.jboss.logging.Logger;
import org.jboss.test.jca.fs.DirContextFactory;
/** An ejb for testing the ejb caller identity propagation
*
* @author Scott.Stark@jboss.org
* @version $Revision: 81036 $
*/
public class CallerIdentityBean implements SessionBean
{
static Logger log = Logger.getLogger(CallerIdentityBean.class);
private SessionContext ctx;
public void ejbCreate()
{
}
public void ejbActivate()
{
}
public void ejbPassivate() throws RemoteException
{
}
public void ejbRemove() throws RemoteException
{
}
public void setSessionContext(SessionContext ctx) throws RemoteException
{
this.ctx = ctx;
}
public void unsetSessionContext() throws RemoteException
{
this.ctx = null;
}
public void useCallerForAuth()
{
try
{
Principal caller = ctx.getCallerPrincipal();
String name0 = caller.getName();
boolean isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
boolean isUseCallerForAuth = ctx.isCallerInRole("UseCallerForAuth");
log.info("useCallerForAuth#0, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseCallerForAuth="+isUseCallerForAuth);
InitialContext enc = new InitialContext();
DataSource ds = (DataSource) enc.lookup("java:comp/env/jdbc/CallerIdentityDS");
testConnection(ds);
caller = ctx.getCallerPrincipal();
String name1 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseCallerForAuth = ctx.isCallerInRole("UseCallerForAuth");
log.info("useCallerForAuth#1, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseCallerForAuth="+isUseCallerForAuth);
if( name0.equals(name1) == false )
throw new EJBException(name0+" != "+name1);
if( isCallerIdentityUser == false || isUseCallerForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseCallerForAuth roles");
}
catch(Exception e)
{
throw new EJBException(e);
}
}
public void useConfiguredForAuth()
{
try
{
Principal caller = ctx.getCallerPrincipal();
String name0 = caller.getName();
boolean isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
boolean isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useConfiguredForAuth#0, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
InitialContext enc = new InitialContext();
DataSource ds = (DataSource) enc.lookup("java:comp/env/jdbc/ConfiguredIdentityDS");
testConnection(ds);
caller = ctx.getCallerPrincipal();
String name1 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useConfiguredForAuth#1, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
if( name0.equals(name1) == false )
throw new EJBException(name0+" != "+name1);
if( isCallerIdentityUser == false || isUseConfiguredForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseConfiguredForAuth roles");
// Access the connection again
ds = (DataSource) enc.lookup("java:comp/env/jdbc/ConfiguredIdentityDS");
for(int n = 0; n < 1000; n ++)
{
testConnection(ds);
}
caller = ctx.getCallerPrincipal();
String name2 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthDS#2, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
if( name0.equals(name2) == false )
throw new EJBException(name0+" != "+name2);
if( isCallerIdentityUser == false || isUseConfiguredForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseConfiguredForAuth roles");
}
catch(Exception e)
{
throw new EJBException(e);
}
}
public void useRunAsForAuthDS()
{
try
{
Principal caller = ctx.getCallerPrincipal();
String name0 = caller.getName();
boolean isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
boolean isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthDS#0, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
InitialContext enc = new InitialContext();
DataSource ds = (DataSource) enc.lookup("java:comp/env/jdbc/RunAsIdentityDS");
testConnection(ds);
caller = ctx.getCallerPrincipal();
String name1 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthDS#1, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
if( name0.equals(name1) == false )
throw new EJBException(name0+" != "+name1);
if( isCallerIdentityUser == false || isUseConfiguredForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseConfiguredForAuth roles");
// Access the connection again
ds = (DataSource) enc.lookup("java:comp/env/jdbc/RunAsIdentityDS");
for(int n = 0; n < 1000; n ++)
{
testConnection(ds);
}
caller = ctx.getCallerPrincipal();
String name2 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthDS#2, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
if( name0.equals(name2) == false )
throw new EJBException(name0+" != "+name2);
if( isCallerIdentityUser == false || isUseConfiguredForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseConfiguredForAuth roles");
}
catch(Exception e)
{
throw new EJBException(e);
}
}
public void useRunAsForAuthFS()
{
try
{
Principal caller = ctx.getCallerPrincipal();
String name0 = caller.getName();
boolean isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
boolean isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthFS#0, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
InitialContext enc = new InitialContext();
DirContextFactory dcf = (DirContextFactory) enc.lookup("java:comp/env/jndi/RunAsIdentityFS");
DirContext dc = dcf.getConnection();
caller = ctx.getCallerPrincipal();
dc.close();
String name1 = caller.getName();
isCallerIdentityUser = ctx.isCallerInRole("CallerIdentityUser");
isUseConfiguredForAuth = ctx.isCallerInRole("UseConfiguredForAuth");
log.info("useRunAsForAuthFS#1, caller="+caller
+", isCallerIdentityUser="+isCallerIdentityUser
+", isUseConfiguredForAuth="+isUseConfiguredForAuth);
if( name0.equals(name1) == false )
throw new EJBException(name0+" != "+name1);
if( isCallerIdentityUser == false || isUseConfiguredForAuth == false )
throw new EJBException("Lost CallerIdentityUser, UseConfiguredForAuth roles");
}
catch(Exception e)
{
throw new EJBException(e);
}
}
private void testConnection(DataSource ds) throws SQLException
{
Connection conn = ds.getConnection();
conn.close();
}
}