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