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
This e-mail may contain privileged and
confidential information which is the property of Persistent Systems
Ltd. It is intended only for the use of the individual or entity to
which it is addressed. If you are not the intended recipient, you are
not authorized to read, retain, copy, print, distribute or use this
message. If you have received this communication in error, please notify
the sender and delete all copies of this message. Persistent Systems
Ltd. does not accept any liability for virus infected mails.