JAASLoginInterceptor leads to java.lang.ClassNotFoundException: org.apache.karaf.jaas.boot.principal.RolePrincipal
keller13 Jul 4, 2013 2:21 PMI am using fuse-esb-7.1.0.fuse-047 which is based on Karaf 2.3.0.fuse-71-047.
I tried to secure a CXF restful service using JAAS login interceptor. From my blueprint.xml the configuration of the JAASLoginInterceptor:
<jaxrs:inInterceptors>
<ref component-id="authenticationInterceptor"/>
</jaxrs:inInterceptors>
<bean id="authenticationInterceptor" class="org.apache.cxf.interceptor.security.JAASLoginInterceptor">
<property name="contextName" value="karaf"/>
</bean>
However, I got java.lang.ClassNotFoundException: org.apache.karaf.jaas.boot.principal.RolePrincipal. According to http://fusesource.com/forums/thread.jspa?messageID=16780 this is
a CXF bug that should have been fixed. Is this bug really fixed?
Or do I do something the wrong way? E.g. I tried to add according import packages but without any success. From my pom.xml:
<Import-Package>
org.apache.karaf.jaas.boot,
org.apache.karaf.jaas.boot.principal,
org.apache.karaf.jaas.config,
org.eclipse.jetty.plus.jaas,
*
</Import-Package>
Do I need to add an uninstalled feature? Or is it possible that other installed features lead to this exception?
See below the Java stack trace.
Thanks, Peter
2013-06-26 16:44:05,899 | WARN | qtp853932697-157 | ServletHandler | | ? | ? | 90 - org.eclipse.jetty.util - 7.6.7.v20120910 | /cxf/rest/cases/ |
java.lang.reflect.UndeclaredThrowableException
at org.ops4j.pax.web.service.internal.$Proxy28.service(Unknown Source)[100:org.ops4j.pax.web.pax-web-runtime:1.1.9] | |
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:652)[80:org.eclipse.jetty.servlet:7.6.7.v20120910] | |
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:447)[80:org.eclipse.jetty.servlet:7.6.7.v20120910] | |
at org.ops4j.pax.web.service.jetty.internal.HttpServiceServletHandler.doHandle(HttpServiceServletHandler.java:70)[98:org.ops4j.pax.web.pax-web-jetty:1.1.9] | |
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:137)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:534)[82:org.eclipse.jetty.security:7.6.7.v20120910] | |
at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:227)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1038)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.ops4j.pax.web.service.jetty.internal.HttpServiceContext.doHandle(HttpServiceContext.java:117)[98:org.ops4j.pax.web.pax-web-jetty:1.1.9] | |
at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:374)[80:org.eclipse.jetty.servlet:7.6.7.v20120910] | |
at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:189)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:972)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:135)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.ops4j.pax.web.service.jetty.internal.JettyServerHandlerCollection.handle(JettyServerHandlerCollection.java:75)[98:org.ops4j.pax.web.pax-web-jetty:1.1.9] | |
at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:116)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.Server.handle(Server.java:363)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.AbstractHttpConnection.handleRequest(AbstractHttpConnection.java:483)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.AbstractHttpConnection.headerComplete(AbstractHttpConnection.java:920)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.headerComplete(AbstractHttpConnection.java:982)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:635)[79:org.eclipse.jetty.http:7.6.7.v20120910] | |
at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:235)[79:org.eclipse.jetty.http:7.6.7.v20120910] | |
at org.eclipse.jetty.server.AsyncHttpConnection.handle(AsyncHttpConnection.java:82)[84:org.eclipse.jetty.server:7.6.7.v20120910] | |
at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:627)[81:org.eclipse.jetty.io:7.6.7.v20120910] | |
at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:51)[81:org.eclipse.jetty.io:7.6.7.v20120910] | |
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:608)[90:org.eclipse.jetty.util:7.6.7.v20120910] | |
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:543)[90:org.eclipse.jetty.util:7.6.7.v20120910] | |
at java.lang.Thread.run(Thread.java:722)[:1.7.0_21] |
Caused by: java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)[:1.7.0_21] | |
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)[:1.7.0_21] | |
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)[:1.7.0_21] | |
at java.lang.reflect.Method.invoke(Method.java:601)[:1.7.0_21] | |
at org.ops4j.pax.web.service.internal.HttpServiceStarted$1.invoke(HttpServiceStarted.java:182)[100:org.ops4j.pax.web.pax-web-runtime:1.1.9] | |
... 27 more |
Caused by: java.lang.RuntimeException: java.lang.ClassNotFoundException: org.apache.karaf.jaas.boot.principal.RolePrincipal not found by org.apache.cxf.cxf-rt-transports-http [178]
at org.eclipse.jetty.plus.jaas.JAASLoginService.getGroups(JAASLoginService.java:327) | |
at org.eclipse.jetty.plus.jaas.JAASLoginService.login(JAASLoginService.java:244) | |
at org.eclipse.jetty.security.authentication.BasicAuthenticator.validateRequest(BasicAuthenticator.java:88) | |
at org.eclipse.jetty.security.authentication.DeferredAuthentication.authenticate(DeferredAuthentication.java:108) | |
at org.eclipse.jetty.server.Request.getUserPrincipal(Request.java:1251) | |
at org.apache.cxf.transport.http.AbstractHTTPDestination.setupMessage(AbstractHTTPDestination.java:332)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:219)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:213)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:154)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:130)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:221)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:146)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
at javax.servlet.http.HttpServlet.service(HttpServlet.java:693)[95:org.apache.geronimo.specs.geronimo-servlet_2.5_spec:1.1.2] | |
at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:197)[178:org.apache.cxf.cxf-rt-transports-http:2.6.0.fuse-71-047] | |
... 32 more |
Caused by: java.lang.ClassNotFoundException: org.apache.karaf.jaas.boot.principal.RolePrincipal not found by org.apache.cxf.cxf-rt-transports-http [178]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1499) | |
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75) | |
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1882) | |
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)[:1.7.0_21] | |
at org.apache.felix.framework.Felix.loadBundleClass(Felix.java:1814) | |
at org.apache.felix.framework.BundleImpl.loadClass(BundleImpl.java:929) | |
at org.ops4j.pax.swissbox.core.BundleClassLoader.findClass(BundleClassLoader.java:176) | |
at org.ops4j.pax.swissbox.core.BundleClassLoader.loadClass(BundleClassLoader.java:194) | |
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)[:1.7.0_21] | |
at org.eclipse.jetty.plus.jaas.JAASLoginService.getGroups(JAASLoginService.java:315) | |
... 45 more |
EDITED: I deleted "I can reproduce this exception using JBoss FUSE ESB 6.0 that is also based on the same Karaf version." from the orginal post as using JBoss FUSE ESB 6.0 is the solution to my problem. Obviously, I must have been making some weird thing when testing my bundle with this OSGI server. Mea culpa.