9 Replies Latest reply on May 11, 2007 3:54 AM by shane.bryzak

    How to authenticate user by department?

    jackyeh

      I have a existing package that authenticate user by department to avoid user name conflict. In other word, there are 3 fields in the login form (Department, User Name and Password).

      Now, I want to use Seam to do the web development. But I stock in the first step--Login process.

      The default Seam authentication mechanism require org.jboss.seam.security.Identity class which does not include Department field.

      I don't want to modify the Identity class directly because of the long term software upgrade consideration. What can I do to resolve this problem?

      Any suggest is welcome.

      I'm using Seam 1.2.1 GA.

      Jack Yeh

        • 1. Re: How to authenticate user by department?
          shane.bryzak

          Just extend the identity class and add a department field.

          • 2. Re: How to authenticate user by department?
            rmemoria

            Why don't you implement a property called Department in your authenticator bean. Maybe it's easier.

            • 3. Re: How to authenticate user by department?
              jackyeh

              1. Extend the Identity class looks like resonable, but how can this derived class be referenced as name of "identity" since the @Name("org.jboss.seam.security.identity") annotation is hard coded in the Identity class.

              2. Indeed, add a property to the authenticator bean could solve this problem, but the property will not stay with Identity instance which is not acceptable by my case because of this property is used wildly after user autheticated.

              3. My intention is embedding some fields to the Identity class without modidying the Identity class. Is this possible ?

              Sorry, I did not make my question clearly in the first post.

              • 4. Re: How to authenticate user by department?
                pmuir

                option 1 allows you do this. Search back through the forum archive, we've discussed this before :)

                • 5. Re: How to authenticate user by department?
                  jackyeh

                  Sorry for my mistake, but after search I really can't find that discuss thread. Could you kindly give me a hint to find that ?

                  Thank you in advance.

                  • 6. Re: How to authenticate user by department?
                    pbrewer_uk

                    Overriding a built-in seam component was previously discussed in this thread:
                    http://www.jboss.com/index.html?module=bb&op=viewtopic&t=101324

                    • 7. Re: How to authenticate user by department?
                      jackyeh

                      I'm trying to extend org.jboss.seam.security.Identity class to append some fields as previous posts advice (many thanks for your help), but I get runtime exception in JBoss AS 4.0.5 GA when I "explode" my project from Eclipse by running ant script that provided by seam-gen.

                      The exception is java.lang.IllegalArgumentException: no such setter method: com.js.floody.adapter.seam.FloodyIdentity.securityRules which com.js.floody.adapter.seam.FloodyIdentity class is the subclass of the Identity class.

                      After study chapter 12 (security) of Seam documentation and trace the source code of Identity and it's precedence classes (namely the Selector and AbstractMutable), I can't find the securityRules() method too.

                      Thus I start to trace component initialization logic (namely the Component, Seam and Initialization classes), but I still can't figure it out what's happen.

                      What can I do next? Any suggestion is welcome.


                      Source code:

                      package com.js.floody.adapter.seam;

                      import org.jboss.seam.annotations.Name;
                      import org.jboss.seam.security.Identity;

                      @Name("org.jboss.seam.security.identity")
                      public class FloodyIdentity extends Identity {

                      private static final long serialVersionUID = 2007050500L;

                      private String department = null;

                      public FloodyIdentity() {
                      super();
                      }

                      public String getDepartment() {
                      return department;
                      }

                      public void setDepartment(String department) {
                      this.department = department;
                      }
                      }


                      Exception stack trace:

                      11:13:43,523 INFO [Component] Component: org.jboss.seam.security.configuration, scope: APPLICATION, type: JAVA_BEAN, class: org.jboss.seam.security.Configuration
                      11:13:43,536 INFO [Component] Component: org.jboss.seam.security.identity, scope: SESSION, type: JAVA_BEAN, class: com.js.floody.adapter.seam.FloodyIdentity
                      11:13:43,573 ERROR [[/Floody]] Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener
                      java.lang.RuntimeException: Could not create Component: org.jboss.seam.security.identity
                      at org.jboss.seam.init.Initialization.addComponent(Initialization.java:865)
                      at org.jboss.seam.init.Initialization.installComponents(Initialization.java:796)
                      at org.jboss.seam.init.Initialization.init(Initialization.java:503)
                      at org.jboss.seam.servlet.SeamListener.contextInitialized(SeamListener.java:33)
                      at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3763)
                      at org.apache.catalina.core.StandardContext.start(StandardContext.java:4211)
                      at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
                      at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
                      at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
                      at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.apache.catalina.core.StandardContext.init(StandardContext.java:5052)
                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.apache.commons.modeler.BaseModelMBean.invoke(BaseModelMBean.java:503)
                      at org.jboss.mx.server.RawDynamicInvoker.invoke(RawDynamicInvoker.java:164)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeployInternal(TomcatDeployer.java:297)
                      at org.jboss.web.tomcat.tc5.TomcatDeployer.performDeploy(TomcatDeployer.java:103)
                      at org.jboss.web.AbstractWebDeployer.start(AbstractWebDeployer.java:371)
                      at org.jboss.web.WebModule.startModule(WebModule.java:83)
                      at org.jboss.web.WebModule.startService(WebModule.java:61)
                      at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
                      at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
                      at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
                      at $Proxy0.start(Unknown Source)
                      at org.jboss.system.ServiceController.start(ServiceController.java:417)
                      at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
                      at $Proxy42.start(Unknown Source)
                      at org.jboss.web.AbstractWebContainer.start(AbstractWebContainer.java:466)
                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
                      at org.jboss.mx.interceptor.DynamicInterceptor.invoke(DynamicInterceptor.java:97)
                      at org.jboss.system.InterceptorServiceMBeanSupport.invokeNext(InterceptorServiceMBeanSupport.java:238)
                      at org.jboss.ws.integration.jboss.DeployerInterceptor.start(DeployerInterceptor.java:92)
                      at org.jboss.deployment.SubDeployerInterceptorSupport$XMBeanInterceptor.start(SubDeployerInterceptorSupport.java:188)
                      at org.jboss.deployment.SubDeployerInterceptor.invoke(SubDeployerInterceptor.java:95)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
                      at $Proxy43.start(Unknown Source)
                      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
                      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1015)
                      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
                      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
                      at sun.reflect.GeneratedMethodAccessor19.invoke(Unknown Source)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
                      at $Proxy8.deploy(Unknown Source)
                      at org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanner.java:421)
                      at org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.java:634)
                      at org.jboss.deployment.scanner.AbstractDeploymentScanner$ScannerThread.doScan(AbstractDeploymentScanner.java:263)
                      at org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(AbstractDeploymentScanner.java:336)
                      at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
                      at org.jboss.system.ServiceMBeanSupport.jbossInternalLifecycle(ServiceMBeanSupport.java:245)
                      at sun.reflect.GeneratedMethodAccessor2.invoke(Unknown Source)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.java:978)
                      at $Proxy0.start(Unknown Source)
                      at org.jboss.system.ServiceController.start(ServiceController.java:417)
                      at sun.reflect.GeneratedMethodAccessor9.invoke(Unknown Source)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:86)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
                      at $Proxy4.start(Unknown Source)
                      at org.jboss.deployment.SARDeployer.start(SARDeployer.java:302)
                      at org.jboss.deployment.MainDeployer.start(MainDeployer.java:1025)
                      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:819)
                      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:782)
                      at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:766)
                      at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
                      at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
                      at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
                      at java.lang.reflect.Method.invoke(Method.java:585)
                      at org.jboss.mx.interceptor.ReflectedDispatcher.invoke(ReflectedDispatcher.java:155)
                      at org.jboss.mx.server.Invocation.dispatch(Invocation.java:94)
                      at org.jboss.mx.interceptor.AbstractInterceptor.invoke(AbstractInterceptor.java:133)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.interceptor.ModelMBeanOperationInterceptor.invoke(ModelMBeanOperationInterceptor.java:142)
                      at org.jboss.mx.server.Invocation.invoke(Invocation.java:88)
                      at org.jboss.mx.server.AbstractMBeanInvoker.invoke(AbstractMBeanInvoker.java:264)
                      at org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:659)
                      at org.jboss.mx.util.MBeanProxyExt.invoke(MBeanProxyExt.java:210)
                      at $Proxy5.deploy(Unknown Source)
                      at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:482)
                      at org.jboss.system.server.ServerImpl.start(ServerImpl.java:362)
                      at org.jboss.Main.boot(Main.java:200)
                      at org.jboss.Main$1.run(Main.java:490)
                      at java.lang.Thread.run(Thread.java:595)
                      Caused by: java.lang.IllegalArgumentException: no such setter method: com.js.floody.adapter.seam.FloodyIdentity.securityRules
                      at org.jboss.seam.util.Reflections.getSetterMethod(Reflections.java:219)
                      at org.jboss.seam.Component.initInitializers(Component.java:401)
                      at org.jboss.seam.Component.(Component.java:263)
                      at org.jboss.seam.Component.(Component.java:203)
                      at org.jboss.seam.init.Initialization.addComponent(Initialization.java:851)
                      ... 139 more
                      11:13:44,002 INFO [FacesConfigurator] Reading standard config org/apache/myfaces/resource/standard-faces-config.xml

                      • 8. Re: How to authenticate user by department?
                        jackyeh

                        Sorry, this problem is solved.

                        • 9. Re: How to authenticate user by department?
                          shane.bryzak

                          Extend RuleBasedIdentity instead of Identity if you want rule-based authorization.