We are implementing a new security package that will be referenced by all of our applications as a central repository for permissions and user account data. This package will sit along side and interface with our LDAP repository. We created a custom Java SSO that all of the applications go through to get the permissions etc. When we invoked a method from PROIV to get the permissions we received the following error.
PROIV Error 835 - SSO METHOD CALL {OurCustomSSO}.getFirstPermissionByUserName FAILED
Versions involved:
jdk1.7.0_60
spring-ldap-core 2.0.3.RELEASE
For posterity:
When PROIV loads an SSO jar, it does so in a class loader which is a child of
the application/system class loader. This causes the use of Spring LDAP to
result in a class cast exception from com.sun.jndi.ldap.LdapCtx to
org.springframework.ldap.core.DirContextOperations. This happens because the
Java JNDI classes use the Thread Context Class Loader (TCCL) to load object
factories used as part of a JNDI lookup. Since the Thread Context Class Loader
defaults to the application/system class loader, and the application/system
class loader does not contain the Spring LDAP classes (they are included in the
child class loader), the appropriate Spring object factory is not loaded. The
current solution is to, within the SSO, set the TCCL to the current class
loader (the class loader for the current class) which includes the Spring LDAP
classes.
---------------------------------------------------------------------------
Class Loader hierarchy when running myappsso jar directly:
---------------------------------------------------------------------------
Classloader sun.misc.Launcher$AppClassLoader@70a6aa31:
file:ssotest/]
file:ssotest/myappapi-1.0-SNAPSHOT.jar
Classloader sun.misc.Launcher$ExtClassLoader@4defb0be:
file:/opt/jdk1.7.0_60/jre/lib/ext/dnsns.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/localedata.jar]
file:/opt/jdk1.7.0_60/jre/lib/ext/sunec.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/sunjce_provider.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/sunpkcs11.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/zipfs.jar
-----------------------------------------------------------------------
Class Loader hierarchy when myappsso is run by PROIV:
-----------------------------------------------------------------------
Classloader java.net.URLClassLoader@592fa617:
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/activation.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/avalon-framework-4.2.0.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/batik-all-1.7.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/commons-io-1.3.1.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/commons-logging-1.0.4.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/fop.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/fopwrapper.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/mail.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/northgate-lexicon-imp-exp.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/northgate-lexicon.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/serializer-2.7.0.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/servlet.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/sso/forgerockapi-1.0-SNAPSHOT.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/sso/northgatearinso-sso.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/sso/pdfextract.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/sso/proivsso-0.0.1-SNAPSHOT-11.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/ssomanager.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/xalan-2.7.0.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/xercesImpl-2.7.1.jar]
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/xml-apis-1.3.04.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/xml-apis-ext-1.3.04.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/xmlgraphics-commons-1.4.jar
Classloader sun.misc.Launcher$AppClassLoader@781fb069:
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/fop.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/fopwrapper.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/mail.jar]
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/northgate-lexicon.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/ojdbc6.jar
file:/opt/pro4/v7.1.53.4/virtual_machine/javalib/ssomanager.jar
Classloader sun.misc.Launcher$ExtClassLoader@6876fb1b:
file:/opt/jdk1.7.0_60/jre/lib/ext/dnsns.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/localedata.jar]
file:/opt/jdk1.7.0_60/jre/lib/ext/sunec.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/sunjce_provider.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/sunpkcs11.jar
file:/opt/jdk1.7.0_60/jre/lib/ext/zipfs.jar