I am trying to implement JAAS in a web application by using Tomcat's implementation of
JAAS (JAASRealm). I've been getting an exception (pls see below) by using the same
source code with different Tomcat configuration (server.xml ). I've used this code in
Weblogic 6.X without any problem. If this could be done in Weblogic, then there is NO
reason why we can't do it in Tomcat. I've included snippets of the server.xml, the
java source code ( ContainerAuthentication.java ) and the exception in the hope that
it might help.
Can anyone tell me what am I doing wrong? Or perhaps point me in the right direction.
// server.xml
<!--Realm className="org.apache.catalina.realm.JAASRealm" debug="99"
appName="JAASPolicy"
userClassNames="java.security.Principal"
roleClassNames="java.security.Principal"/-->
<Realm className="org.apache.catalina.realm.JAASRealm" debug="99"
loginContext="JAASPolicy"
callbackHandler="cdmanager.security.tomcat.JAASLoginCallbackHandler"/>
// ContainerAuthentication.java
// login method starts here
public void login(ServletRequest request)
throws LoginException
{
try
{
LoginContext loginContext = null;
PasswordLoginProperties plProperties =
PasswordLoginProperties.getPasswordLoginProperties();
Properties property = new Properties(System.getProperties());
property.put( "configPolicyFileName",
plProperties.getConfigPolicyFileName());
property.put("java.security.auth.login.config",
plProperties.getConfigPolicyFileName() );
System.setProperties(property);
// shorten here
JAASLoginCallbackHandler handler = new
cdmanager.security.tomcat.JAASLoginCallbackHandler(request);
loginContext = new LoginContext("JAASPolicy", handler );
loginContext.login(); // exception is thrown in this line
}
catch(ConfigException ce) {
throw new LoginException(ce.toString());
}
}
// login method ends here ( shorten version)
// And here is the exception
java.lang.SecurityException: unable to instantiate LoginConfiguration at
javax.security.auth.login.Configuration.getConfiguration(Configuration.java:212)
at javax.security.auth.login.LoginContext$1.run(LoginContext.java:166) at
java.security.AccessController.doPrivileged(Native Method) at
javax.security.auth.login.LoginContext.init(LoginContext.java:163) at
javax.security.auth.login.LoginContext.(LoginContext.java:319) at
cdmanager.security.tomcat.ContainerAuthentication.login(Unknown Source) at
cdmanager.actions.LogonAction.execute(Unknown Source) at
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:446)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:266) at
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1292) at
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:510) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:760) at
javax.servlet.http.HttpServlet.service(HttpServlet.java:853) at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at
org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2415) at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at
org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:172)
at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174) at
org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480) at
org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995) at
org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:223) at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:594) at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:392)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:565) at
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:619)
at java.lang.Thread.run(Thread.java:479)
---------------------------------
Apache Tomcat/4.1.24
---------------------------------
Do you Yahoo!?
SBC Yahoo! DSL - Now only $29.95 per month!