Hello Jetty users,
We are migrating Jetty from v6 to ver 9.4.27 & using embedded Jetty.
Where in authentication is performed using form based , Jaas authentication.
In Jaas.conf file we have configured to use following custom module
class com.acme.es.nuvo.ediscovery.jaas.DiscoveryLoginModule which extends from AbstractLoginModule.
Now inside Login method of this class, We have following line of code
Credential cr = Credential.getCredential(pwdStr);
Where we are getting NoClassDefFoundError for org.eclipse.jetty.util.security.Credential.
Note : This issue is observed on Jetty 9.x & 8.x ( but was working fine with 6.x )
Inspite of the fact that jetty-util jar corresponding to this is present in the buildpath.
Also,
Verbose:class shows that this class is getting loaded.
class load: org.eclipse.jetty.util.security.Credential from: file:/../lib/Jetty9.4.15/jetty-util-9.4.15.v20190215.jar
Can anybody suggest what I might be missing ? Any appropriate way to troubleshoot this?
Any help would be really appreciated.
Here is detailed stack:
javax.security.auth.login.LoginException: java.lang.NoClassDefFoundError: org.eclipse.jetty.util.security.Credential
at com.acme.es.nuvo.ediscovery.jaas.DiscoveryLoginModule.login(DiscoveryLoginModule.java:148)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at javax.security.auth.login.LoginContext.invoke(LoginContext.java:788)
at javax.security.auth.login.LoginContext.access$000(LoginContext.java:196)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:698)
at javax.security.auth.login.LoginContext$4.run(LoginContext.java:696)
at java.security.AccessController.doPrivileged(AccessController.java:650)
at javax.security.auth.login.LoginContext.invokePriv(LoginContext.java:696)
at javax.security.auth.login.LoginContext.login(LoginContext.java:597)
at org.eclipse.jetty.jaas.JAASLoginService.login(JAASLoginService.java:251)
at org.eclipse.jetty.security.authentication.LoginAuthenticator.login(LoginAuthenticator.java:67)
at org.eclipse.jetty.security.authentication.FormAuthenticator.login(FormAuthenticator.java:182)
at org.eclipse.jetty.security.authentication.DeferredAuthentication.login(DeferredAuthentication.java:118)
at org.eclipse.jetty.server.Request.login(Request.java:2411)
at com.acme.es.nuvo.ediscovery.ui.actions.LoginAction.login(LoginAction.java:70)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:55)
at java.lang.reflect.Method.invoke(Method.java:508)
at com.acme.es.nuvo.ediscovery.ui.DiscoveryAction.dispatchMethod(DiscoveryAction.java:149)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at com.acme.es.nuvo.ediscovery.ui.DiscoveryRequestProcessor.process(DiscoveryRequestProcessor.java:84)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at com.acme.es.nuvo.ediscovery.ui.SecureServlet.process(SecureServlet.java:67)
at org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder$NotAsyncServlet.service(ServletHolder.java:1395)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:755)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1617)
at com.acme.es.nuvo.common.CompressionFilter.doFilter(CompressionFilter.java:80)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at com.acme.es.nuvo.common.CacheFilter.doFilter(CacheFilter.java:92)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at com.acme.es.nuvo.common.Utf8Filter.doFilter(Utf8Filter.java:34)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at com.acme.es.nuvo.common.LocaleFilter.doFilter(LocaleFilter.java:57)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at com.acme.es.nuvo.common.SecurityTokenFilter.doFilter(SecurityTokenFilter.java:78)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1604)
at com.acme.es.nuvo.common.SSLFilter.doFilter(SSLFilter.java:58)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1596)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143)
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:566)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1300)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1215)
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)
at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)
at org.eclipse.jetty.server.handler.DebugHandler.handle(DebugHandler.java:81)
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
at org.eclipse.jetty.server.Server.handle(Server.java:500)
at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
at org.eclipse.jetty.server.HttpChannel$$Lambda$59.0000000000D9AA80.dispatch(Unknown Source)
at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:547)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:273)
at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ssl.SslConnection$DecryptedEndPoint.onFillable(SslConnection.java:543)
at org.eclipse.jetty.io.ssl.SslConnection.onFillable(SslConnection.java:398)
at org.eclipse.jetty.io.ssl.SslConnection$2.succeeded(SslConnection.java:161)
at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:117)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129)
at org.eclipse.jetty.util.thread.ReservedThreadExecutor$ReservedThread.run(ReservedThreadExecutor.java:375)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
at java.lang.Thread.run(Thread.java:785)
Caused by: java.lang.ClassNotFoundException: org.eclipse.jetty.util.security.Credential
at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:565)
at java.lang.ClassLoader.loadClass(ClassLoader.java:809)
... 86 more
Other details :
A.
We are instantiating jetty instance through Java code and where we refer jetty.xml for server configuration.
B.
In jetty.xml we uses following
<Configure id="Server" class="org.eclipse.jetty.server.Server">
…
…
<Call
name="addBean">
<Arg>
<New
id="DeploymentManager"
class="org.eclipse.jetty.deploy.DeploymentManager">
<Set
name="contexts">
<Ref
refid="Contexts"
/>
</Set>
<Call
id="webappprovider"
name="addAppProvider">
<Arg>
<New
class="org.eclipse.jetty.deploy.providers.WebAppProvider">
<Set
name="monitoredDirName"><Property
name="Project.home"
default="."
/>/config/jetty_contexts</Set>
<Set
name="scanInterval">0</Set>
<Set
name="extractWars">true</Set>
<!-- <Set name="Recursive">true</Set>
-->
</New>
</Arg>
</Call>
</New>
</Arg>
</Call>
…
</Configure>
C. one of the file present at
<project.home>/config/jetty_contexts is ediscovery.xml
<Configure
class="org.eclipse.jetty.webapp.WebAppContext">
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<!-- Required minimal context configuration : -->
<!-- + contextPath -->
<!-- + war OR resourceBase -->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<Set
name="contextPath">/ediscovery</Set>
<!-- <Set name="parentLoaderPriority">true</Set>-->
<Set
name="war"><SystemProperty
name="Project.home"
default="."/>/lib/Application_ui.war</Set>
…..
<Set
name="securityHandler">
<New
class="org.eclipse.jetty.security.ConstraintSecurityHandler">
<Set
name="loginService">
<New
class="org.eclipse.jetty.jaas.JAASLoginService">
<Set
name="name">ediscovery</Set>
<Set
name="loginModuleName">DiscoveryLoginModule</Set>
<Set
name="CallbackHandlerClass">
org.eclipse.jetty.jaas.callback.DefaultCallbackHandler
</Set>
<Set
name="roleClassNames">
<Array
type="java.lang.String">
<Item>org.eclipse.jetty.jaas.JAASRole</Item>
</Array>
</Set>
</New>
</Set>
<Set
name="checkWelcomeFiles">true</Set>
</New>
</Set>
…
</Configure>
Now I have few observations.
When in File C i.e. ediscovery.xml I make following line uncommented
<Set name="parentLoaderPriority">true</Set>
Then,
In my eclipse I don’t see any No Class Def Found Error.
But,
- In my build environment ( installed version, I see same error , classpath has required jars present )
- Jetty 6 we were nor setting
parentLoaderPriority to True.
Any help to troubleshoot this problem will be appreciated.
Thanks & Regards,
Sujay
DISCLAIMER