Turns out that stoping/starting the Tomcat service with the Tomcat provided service control panel was causing the problem. Using the Windows Services control panel, for whatever reason, allows my authentication scheme to work correctly.
H On 9/21/06, Henry McClain <[EMAIL PROTECTED]> wrote:
Gentlemen, I am attempting to authenticate users via JAAS NTLoginModule and repeatedly recieve an ArrayIndexOutOfBoundsException wrapped in a LoginException. The error is (packages removed for confidentiality purposes): javax.security.auth.login.LoginException : java.lang.ArrayIndexOutOfBoundsException at com.sun.security.auth.module.NTSystem.getCurrent(Native Method) at com.sun.security.auth.module.NTSystem.<init>(Unknown Source) at com.sun.security.auth.module.NTLoginModule.login(Unknown Source) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke (Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at javax.security.auth.login.LoginContext.invoke (Unknown Source) at javax.security.auth.login.LoginContext.access$000(Unknown Source) at javax.security.auth.login.LoginContext$4.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.login.LoginContext.invokePriv (Unknown Source) at javax.security.auth.login.LoginContext.login(Unknown Source) at -------confidential-------- .UserServiceBean.authenticate( UserServiceBean.java:40) at -------confidential-------- .UserServiceBean.registerNewUser( UserServiceBean.java:130) at -------confidential-------- .servlets.AppManagerInitServlet.init( AppManagerInitServlet.java:33) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.security.SecurityUtil$1.run(SecurityUtil.java :243) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAsPrivileged(Unknown Source) at org.apache.catalina.security.SecurityUtil.execute(SecurityUtil.java:275) at org.apache.catalina.security.SecurityUtil.doAsPrivilege( SecurityUtil.java:161) at org.apache.catalina.security.SecurityUtil.doAsPrivilege( SecurityUtil.java:114) at org.apache.catalina.core.StandardWrapper.loadServlet( StandardWrapper.java:1099) at org.apache.catalina.core.StandardWrapper.load (StandardWrapper.java :932) at org.apache.catalina.core.StandardContext.loadOnStartup( StandardContext.java:3917) at org.apache.catalina.core.StandardContext.start(StandardContext.java :4201) at org.apache.catalina.core.ContainerBase.addChildInternal( ContainerBase.java:759) at org.apache.catalina.core.ContainerBase.access$000( ContainerBase.java:121) at org.apache.catalina.core.ContainerBase$PrivilegedAddChild.run ( ContainerBase.java:143) at java.security.AccessController.doPrivileged(Native Method) at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java :737) at org.apache.catalina.core.StandardHost.addChild(StandardHost.java :524) at org.apache.catalina.startup.HostConfig.deployWAR (HostConfig.java :809) at org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java :698) at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java :472) at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1122) at org.apache.catalina.startup.HostConfig.lifecycleEvent ( HostConfig.java:310) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent( LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java :1021) at org.apache.catalina.core.StandardHost.start(StandardHost.java:718) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java :1013) at org.apache.catalina.core.StandardEngine.start (StandardEngine.java :442) at org.apache.catalina.core.StandardService.start(StandardService.java :450) at org.apache.catalina.core.StandardServer.start(StandardServer.java :709) at org.apache.catalina.startup.Catalina.start(Catalina.java:551) at sun.reflect.NativeMethodAccessorImpl.invoke0 (Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) at java.lang.reflect.Method.invoke(Unknown Source) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java :294) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:432) NTSystem.getCurrent(Native Method) is a private method of NTSystem . This code executed as a standalone application works perfectly. This code executed in Tomcat 5.5 (not a servlet) fails. I have exhaustively researched this on the web and have attempted to trace the problem in the JAAS source code. The current operation has a servlet ( AppManagerInitServlet ) initializing on Tomcat startup that attempts to authenticate a known user (for testing purposes). I am currently executing this code with the Catalina SecurityManager in place, but I have get the exact same results not using the Catalina SecurityManager. For testing purposes, I have given my web application java.security.AllPermissionuntil this can be resolved. Beyond instantiating a LoginContext and passing it my CallbackHandler I have no idea why this would fail, especially since it works in one environment and not another. Please help. ===================================================================================================================== My environment: Windows XP SP2 JDK 1.5.0_06 ( I have also tested on 1.5.0_08 with the same results) Tomcat 5.5.17 Relevant JVM switches: -Djava.security.manager -Djava.security.policy=D:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\catalina.policy -Djava.security.auth.login.config=D:\Program Files\Apache Software Foundation\Tomcat 5.5\conf\jaas.conf catalina.policy // FOR TESTING PURPOSES ONLY grant codeBase "file:${ catalina.home}/webapps/myapp/-" { permission java.security.AllPermission; }; JAAS Config File: mydomain { com.sun.security.auth.module.NTLoginModule required debug=true; }; -- Henry McClain "Life is hard. Wear a helmet" "Tell your wife that she looks pretty, even if she looks like a truck." --
-- Henry McClain "Life is hard. Wear a helmet" "Tell your wife that she looks pretty, even if she looks like a truck." --