[keycloak-user] How to include the keycloak wildfly adapter libraries in the secure war application classpath?

Darrell Wu darrell at 1placeonline.com
Fri May 20 23:15:41 EDT 2016


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/keycloak-user/attachments/20160521/db4d1dda/attachment-0001.html 


More information about the keycloak-user mailing list