use of com.sun.enterprise.resource.ClientSecurityInfo in project Payara by payara.
the class ConnectionManagerImpl method internalGetConnection.
protected Object internalGetConnection(ManagedConnectionFactory mcf, final ResourcePrincipal prin, ConnectionRequestInfo cxRequestInfo, boolean shareable, String jndiNameToUse, Object conn, boolean isUnknownAuth) throws ResourceException {
try {
PoolManager poolmgr = ConnectorRuntime.getRuntime().getPoolManager();
ConnectorRegistry registry = ConnectorRegistry.getInstance();
PoolMetaData pmd = registry.getPoolMetaData(poolInfo);
ResourceSpec spec = new ResourceSpec(jndiNameToUse, ResourceSpec.JNDI_NAME, pmd);
spec.setPoolInfo(this.poolInfo);
ManagedConnectionFactory freshMCF = pmd.getMCF();
if (getLogger().isLoggable(Level.INFO)) {
if (!freshMCF.equals(mcf)) {
getLogger().info("conmgr.mcf_not_equal");
}
}
ConnectorDescriptor desc = registry.getDescriptor(rarName);
Subject subject = null;
ClientSecurityInfo info = null;
boolean subjectDefined = false;
if (isUnknownAuth && rarName.equals(ConnectorConstants.DEFAULT_JMS_ADAPTER) && !(pmd.isAuthCredentialsDefinedInPool())) {
// System.out.println("Unkown Auth - pobably nonACC client");
// Unknown authorization. This is the case for standalone java clients,
// where the authorization is neither container nor component
// managed. In this case we associate an non-null Subject with no
// credentials, so that the RA can either use its own custom logic
// for figuring out the credentials. Relevant connector spec section
// is 9.1.8.2.
// create non-null Subject associated with no credentials
// System.out.println("RAR name "+ rarName);
subject = ConnectionPoolObjectsUtils.createSubject(mcf, null);
} else {
if (prin == null) {
info = new ClientSecurityInfo(cxRequestInfo);
} else {
info = new ClientSecurityInfo(prin);
if (prin.equals(defaultPrin)) {
subject = pmd.getSubject();
} else {
subject = ConnectionPoolObjectsUtils.createSubject(mcf, prin);
}
}
}
int txLevel = pmd.getTransactionSupport();
if (getLogger().isLoggable(Level.FINE)) {
logFine("ConnectionMgr: poolName " + poolInfo + " txLevel : " + txLevel);
}
if (conn != null) {
spec.setConnectionToAssociate(conn);
}
return getResource(txLevel, poolmgr, mcf, spec, subject, cxRequestInfo, info, desc, shareable);
} catch (PoolingException ex) {
Object[] params = new Object[] { poolInfo, ex };
getLogger().log(Level.WARNING, "poolmgr.get_connection_failure", params);
// GLASSFISH-19609
// we can't simply look for ResourceException and throw back since
// Connector Container also throws ResourceException which might
// hide the SecurityException thrown by RA.
// So, we try to track SecurityException
unwrapSecurityException(ex);
String i18nMsg = getLocalStrings().getString("con_mgr.error_creating_connection", ex.getMessage());
ResourceAllocationException rae = new ResourceAllocationException(i18nMsg);
rae.initCause(ex);
throw rae;
}
}
Aggregations