[keycloak-user] How to include the keycloak wildfly adapter libraries in the secure war application classpath?
Stian Thorgersen
sthorger at redhat.com
Wed May 25 01:05:09 EDT 2016
The dependencies should be automatically injected into your WAR if it's
either secured in standalone.xml or if the auth-method is set to KEYCLOAK.
On 21 May 2016 at 05:15, Darrell Wu <darrell at 1placeonline.com> wrote:
> I'm not using the saml client adapters, i'm using the jboss/wildfly adapter
> as mention here
>
> http://keycloak.github.io/docs/userguide/keycloak-server/html/ch08.html#jboss-adapter
>
> I have the following in my wildfly 10 standalone.xml file
> under entensions
>
> <extension module="org.keycloak.keycloak-adapter-subsystem"/>
>
> under security subsystem
> <security-domain name="keycloak">
> <authentication>
> <login-module
> code="org.keycloak.adapters.jboss.KeycloakLoginModule" flag="required"/>
> </authentication>
> </security-domain>
>
> under the keycloak subsystem i have secure my application
>
> <secure-deployment name="reporting-server-rest.war">
> <realm>1Place</realm>
> <resource>1Place-reporting</resource>
> <realm-public-key>xxxxxxxxKey
> removedxxxxxxxxxxx</realm-public-key>
> <auth-server-url>http://localhost:8180/</auth-server-url>
> <ssl-required>EXTERNAL</ssl-required>
> <credential name="secret">xxxxxxxxKey
> removedxxxxxxxxxxx</credential>
> </secure-deployment>
>
> The reporting-server-rest.war is in an EAR archive with an ejb jar. The
> code with the exception is a stateless session bean(OperatorService ) in
> the ejb jar.
> It is called by a produces method
>
>
> public class CurrentUserProducer {
>
>
> @Inject
> OperatorService operatorService;
>
> @LoggedInUser
> @Produces
> public CurrentUser produceCurrentUser() {
> return operatorService.getCurrentUser();
> }
> }
>
>
>
> The OperatorService stateless session bean getCurrentUser method looks
> like the following. The exception is occurring on the first line
> @Inject
> private HttpServletRequest httpRequest;
>
> public CurrentUser getCurrentUser(){
> KeycloakSecurityContext securityContext = (KeycloakSecurityContext)
> httpRequest.getAttribute(KeycloakSecurityContext.class.getName());
>
>
> a filter in the reporting-server-rest.war archive is injecting the
> CurrentUser like so
>
> @WebFilter(dispatcherTypes = {DispatcherType.REQUEST,
> DispatcherType.FORWARD}, urlPatterns = {"/*"})
> public class CurrentUserFilter implements Filter {
>
> @Inject @LoggedInUser
> private CurrentUser currentUser;
>
>
>
> I'm getting the following exception in the log
>
> 14:26:38,444 ERROR [io.undertow.request] (default task-10) UT005023:
> Exception handling request to
> /reporting-server-rest/widgets/checklistQuestion:
> javax.servlet.ServletException: UT010013: Could not instantiate com.one
> placeonline.rest.CurrentUserFilter
> at
> io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:76)
> at
> io.undertow.servlet.core.ManagedFilter.getFilter(ManagedFilter.java:65)
> at
> io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:60)
> at
> io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:131)
> at
> io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:84)
> at
> io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:62)
> at
> io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
> at
> org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
> at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
> at
> org.keycloak.adapters.undertow.UndertowAuthenticatedActionsHandler.handleRequest(UndertowAuthenticatedActionsHandler.java:66)
> at
> io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:131)
> at
> io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
> at
> io.undertow.server.handlers.DisableCacheHandler.handleRequest(DisableCacheHandler.java:33)
> at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
> at
> io.undertow.security.handlers.AuthenticationConstraintHandler.handleRequest(AuthenticationConstraintHandler.java:51)
> at
> io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
> at
> io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:64)
> at
> io.undertow.servlet.handlers.security.ServletSecurityConstraintHandler.handleRequest(ServletSecurityConstraintHandler.java:56)
> at
> io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
> at
> io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
> at
> io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
> at
> io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
> at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
> at
> org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
> at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
> at
> org.keycloak.adapters.undertow.ServletPreAuthActionsHandler.handleRequest(ServletPreAuthActionsHandler.java:69)
> at
> io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
> at
> io.undertow.servlet.handlers.ServletInitialHandler.jrHandle(ServletInitialHandler.java)
> at
> org.zeroturnaround.javarebel.integration.servlet.undertow.cbp.ServletInitialHandlerCBP.handleRequest(ServletInitialHandlerCBP.java:100)
> at
> io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:284)
> at
> io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:263)
> at
> io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:81)
> at
> io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:174)
> at
> io.undertow.server.Connectors.executeRootHandler(Connectors.java:202)
> at
> io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:793)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.IllegalStateException: WFLYEE0042: Failed to
> construct component instance
> at
> org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:163)
> at
> org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:134)
> at
> org.jboss.as.ee.component.BasicComponent.createInstance(BasicComponent.java:88)
> at
> org.jboss.as.ee.component.ComponentRegistry$ComponentManagedReferenceFactory.getReference(ComponentRegistry.java:149)
> at
> org.wildfly.extension.undertow.deployment.UndertowDeploymentInfoService$6.createInstance(UndertowDeploymentInfoService.java:1366)
> at
> io.undertow.servlet.core.ManagedFilter.createFilter(ManagedFilter.java:74)
> ... 37 more
> Caused by: javax.ejb.EJBException: WFLYEJB0442: Unexpected Error
> at
> org.jboss.as.ejb3.tx.CMTTxInterceptor.handleExceptionInOurTx(CMTTxInterceptor.java:184)
> at
> org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:277)
> at
> org.jboss.as.ejb3.tx.CMTTxInterceptor.required(CMTTxInterceptor.java:327)
> at
> org.jboss.as.ejb3.tx.CMTTxInterceptor.processInvocation(CMTTxInterceptor.java:239)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.interceptors.CurrentInvocationContextInterceptor.processInvocation(CurrentInvocationContextInterceptor.java:41)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.invocationmetrics.WaitTimeInterceptor.processInvocation(WaitTimeInterceptor.java:43)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.security.SecurityContextInterceptor.processInvocation(SecurityContextInterceptor.java:100)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.interceptors.ShutDownInterceptorFactory$1.processInvocation(ShutDownInterceptorFactory.java:64)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.interceptors.LoggingInterceptor.processInvocation(LoggingInterceptor.java:66)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ee.component.NamespaceContextInterceptor.processInvocation(NamespaceContextInterceptor.java:50)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.interceptors.AdditionalSetupInterceptor.processInvocation(AdditionalSetupInterceptor.java:54)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
> at
> org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:636)
> at
> org.jboss.invocation.AccessCheckingInterceptor.processInvocation(AccessCheckingInterceptor.java:61)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
> at
> org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
> at
> org.jboss.as.ee.component.ViewService$View.invoke(ViewService.java:195)
> at
> org.jboss.as.ee.component.ViewDescription$1.processInvocation(ViewDescription.java:185)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
> at
> org.jboss.as.ee.component.ProxyInvocationHandler.invoke(ProxyInvocationHandler.java:73)
> at
> com.oneplaceonline.business.users.boundary.OperatorService$$$view14.getCurrentUser(Unknown
> Source)
> at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
> org.jboss.weld.util.reflection.Reflections.invokeAndUnwrap(Reflections.java:436)
> at
> org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler.invoke(EnterpriseBeanProxyMethodHandler.java:127)
> at
> org.jboss.weld.bean.proxy.EnterpriseTargetBeanInstance.invoke(EnterpriseTargetBeanInstance.java:56)
> at
> org.jboss.weld.bean.proxy.InjectionPointPropagatingEnterpriseTargetBeanInstance.invoke(InjectionPointPropagatingEnterpriseTargetBeanInstance.java:67)
> at
> org.jboss.weld.bean.proxy.ProxyMethodHandler.invoke(ProxyMethodHandler.java:100)
> at
> com.oneplaceonline.business.users.boundary.OperatorService$Proxy$_$$_Weld$EnterpriseProxy$.getCurrentUser(Unknown
> Source)
> at
> com.oneplaceonline.business.users.boundary.CurrentUserProducer.produceCurrentUser(CurrentUserProducer.java:17)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
> org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:88)
> at
> org.jboss.weld.injection.StaticMethodInjectionPoint.invoke(StaticMethodInjectionPoint.java:78)
> at
> org.jboss.weld.injection.producer.ProducerMethodProducer.produce(ProducerMethodProducer.java:99)
> at
> org.jboss.weld.injection.producer.AbstractMemberProducer.produce(AbstractMemberProducer.java:161)
> at
> org.jboss.weld.bean.AbstractProducerBean.create(AbstractProducerBean.java:181)
> at
> org.jboss.weld.context.unbound.DependentContextImpl.get(DependentContextImpl.java:70)
> at
> org.jboss.weld.bean.ContextualInstanceStrategy$DefaultContextualInstanceStrategy.get(ContextualInstanceStrategy.java:101)
> at
> org.jboss.weld.bean.ContextualInstance.get(ContextualInstance.java:50)
> at
> org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:742)
> at
> org.jboss.weld.manager.BeanManagerImpl.getInjectableReference(BeanManagerImpl.java:842)
> at
> org.jboss.weld.injection.FieldInjectionPoint.inject(FieldInjectionPoint.java:92)
> at org.jboss.weld.util.Beans.injectBoundFields(Beans.java:378)
> at
> org.jboss.weld.util.Beans.injectFieldsAndInitializers(Beans.java:389)
> at
> org.jboss.weld.injection.producer.DefaultInjector$1.proceed(DefaultInjector.java:71)
> at
> org.jboss.weld.injection.InjectionContextImpl.run(InjectionContextImpl.java:48)
> at
> org.jboss.weld.injection.producer.DefaultInjector.inject(DefaultInjector.java:73)
> at
> org.jboss.weld.injection.producer.BasicInjectionTarget.inject(BasicInjectionTarget.java:121)
> at
> org.jboss.as.weld.injection.WeldInjectionContext.inject(WeldInjectionContext.java:39)
> at
> org.jboss.as.weld.injection.WeldInjectionInterceptor.processInvocation(WeldInjectionInterceptor.java:51)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ee.component.AroundConstructInterceptorFactory$1.processInvocation(AroundConstructInterceptorFactory.java:28)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.weld.injection.WeldInterceptorInjectionInterceptor.processInvocation(WeldInterceptorInjectionInterceptor.java:56)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.weld.injection.WeldInjectionContextInterceptor.processInvocation(WeldInjectionContextInterceptor.java:43)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ContextClassLoaderInterceptor.processInvocation(ContextClassLoaderInterceptor.java:64)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InterceptorContext.run(InterceptorContext.java:356)
> at
> org.jboss.invocation.PrivilegedWithCombinerInterceptor.processInvocation(PrivilegedWithCombinerInterceptor.java:80)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
> at
> org.jboss.as.ee.component.BasicComponent.constructComponentInstance(BasicComponent.java:161)
> ... 42 more
> Caused by: java.lang.NoClassDefFoundError:
> org/keycloak/KeycloakSecurityContext
> at
> com.oneplaceonline.business.users.boundary.OperatorService.getCurrentUser(OperatorService.java:81)
> at sun.reflect.GeneratedMethodAccessor89.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> at java.lang.reflect.Method.invoke(Method.java:497)
> at
> org.jboss.as.ee.component.ManagedReferenceMethodInterceptor.processInvocation(ManagedReferenceMethodInterceptor.java:52)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
> at
> org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.doMethodInterception(Jsr299BindingsInterceptor.java:82)
> at
> org.jboss.as.weld.ejb.Jsr299BindingsInterceptor.processInvocation(Jsr299BindingsInterceptor.java:93)
> at
> org.jboss.as.ee.component.interceptors.UserInterceptorFactory$1.processInvocation(UserInterceptorFactory.java:63)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.invocationmetrics.ExecutionTimeInterceptor.processInvocation(ExecutionTimeInterceptor.java:43)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.jpa.interceptor.SBInvocationInterceptor.processInvocation(SBInvocationInterceptor.java:47)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InterceptorContext$Invocation.proceed(InterceptorContext.java:437)
> at
> org.jboss.weld.ejb.AbstractEJBRequestScopeActivationInterceptor.aroundInvoke(AbstractEJBRequestScopeActivationInterceptor.java:64)
> at
> org.jboss.as.weld.ejb.EjbRequestScopeActivationInterceptor.processInvocation(EjbRequestScopeActivationInterceptor.java:83)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ee.concurrent.ConcurrentContextInterceptor.processInvocation(ConcurrentContextInterceptor.java:45)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.InitialInterceptor.processInvocation(InitialInterceptor.java:21)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.invocation.ChainedInterceptor.processInvocation(ChainedInterceptor.java:61)
> at
> org.jboss.as.ee.component.interceptors.ComponentDispatcherInterceptor.processInvocation(ComponentDispatcherInterceptor.java:52)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.component.pool.PooledInstanceInterceptor.processInvocation(PooledInstanceInterceptor.java:51)
> at
> org.jboss.invocation.InterceptorContext.proceed(InterceptorContext.java:340)
> at
> org.jboss.as.ejb3.tx.CMTTxInterceptor.invokeInOurTx(CMTTxInterceptor.java:275)
> ... 124 more
>
> Does it have anything to do with the change in 1.9.0
>
> http://keycloak.github.io/docs/userguide/keycloak-server/html/Migration_from_older_versions.html#d4e4103
> under
> 35.6.3. Migrating to 1.9.0Adapter Subsystems only bring in dependencies
> if keycloak is on
>
> Previously, if you had installed our saml or oidc keycloak subsystem
> adapters into Wildfly or JBoss EAP, we would automatically include Keycloak
> client jars into EVERY application irregardless if you were using Keycloak
> or not. These libraries are now only added to your deployment if you have
> keycloak authentication turned on for that adapter (via the subsystem, or
> auth-method in web.xml
>
> Mind you i'm not using saml or oidc adapter
>
>
>
> On 21 May 2016 at 00:51, Bruno Oliveira <bruno at abstractj.org> wrote:
>
>> Do you have the security domain specified like described here:
>>
>> http://keycloak.github.io/docs/userguide/saml-client-adapter/html/jboss-adapter.html
>>
>> If possible send some steps to reproduce or the code snippet.
>>
>>
>> On 2016-05-20, Darrell Wu wrote:
>> > If it helps I'm using wildfly 10 and have keycloak on a standalone
>> server.
>> > The authenication works. It just when my app tries to read the security
>> > context I get the class not found exception.
>> >
>> > So what triggers wildfly to include the keycloak modules in my apps
>> class
>> > path?
>> > On 20/05/2016 10:10 pm, "Bruno Oliveira" <bruno at abstractj.org> wrote:
>> >
>> > > Weird because it was fixed here:
>> > > https://issues.jboss.org/browse/KEYCLOAK-2483. Plus, I tested
>> > > on WildFly 9.0.2.Final with Keycloak adapter 1.9.4.Final and couldn't
>> > > reproduce the issue.
>> > >
>> > > On 2016-05-20, Darrell Wu wrote:
>> > > > Hi,
>> > > >
>> > > > With the keycloak wildfly adapter for version 1.9.x i've noticed
>> that the
>> > > > location of the Keycloak Subsystem modules have changed from
>> > > > modules\system\layers\base\org\keycloak to
>> > > > modules\system\add-ons\keycloak\org\keycloak
>> > > >
>> > > > Now on my secure war application server I've installed the keycloak
>> > > wildfly
>> > > > adpater by unzipping the archive and running the adapter-install.cl
>> > > script.
>> > > >
>> > > > Now In my application i'm getting a
>> > > > ClassNotFoundException: org.keycloak.KeycloakSecurityContext
>> > > >
>> > > > when the following is executed
>> > > >
>> > > > KeycloakSecurityContext securityContext = (KeycloakSecurityContext)
>> > > > httpRequest.getAttribute(KeycloakSecurityContext.class.getName());
>> > > >
>> > > > Obviously the application isn't loading the keycloak modules in the
>> > > > classpath.
>> > > > What is the proper way to include the keycloak libraries in my app?
>> > > >
>> > > > Should my app have a jboss-deployment-structure.xml file or
>> should the
>> > > > libraries be moved back to modules\system\layers\base\org\keycloak?
>> > > >
>> > > > Thanks
>> > > >
>> > > >
>> > > >
>> > > > --
>> > > > Darrell Wu
>> > > > 1Place Limited
>> > > > P.O. Box 125152, St Heliers, Auckland 1740, New Zealand
>> > > > Level 4, 1 Queen Street, Auckland 1010, New Zealand
>> > > > Phone: +64 9 5200612 ext 521 | Mob: +64 21 262 4898 | Fax: +64 9
>> 5246203
>> > > > Email: darrell at 1placeonline.com | Web: www.1placeonline.com
>> > >
>> > > > _______________________________________________
>> > > > keycloak-user mailing list
>> > > > keycloak-user at lists.jboss.org
>> > > > https://lists.jboss.org/mailman/listinfo/keycloak-user
>> > >
>> > >
>> > > --
>> > >
>> > > abstractj
>> > > PGP: 0x84DC9914
>> > >
>>
>> --
>>
>> abstractj
>> PGP: 0x84DC9914
>>
>
>
>
> --
> Darrell Wu
> 1Place Limited
> P.O. Box 125152, St Heliers, Auckland 1740, New Zealand
> Level 4, 1 Queen Street, Auckland 1010, New Zealand
> Phone: +64 9 5200612 ext 521 | Mob: +64 21 262 4898 | Fax: +64 9 5246203
> Email: darrell at 1placeonline.com | Web: www.1placeonline.com
>
> _______________________________________________
> keycloak-user mailing list
> keycloak-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/keycloak-user
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-user/attachments/20160525/8d980b00/attachment-0001.html
More information about the keycloak-user
mailing list