You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@struts.apache.org by Wes Wannemacher <we...@wantii.com> on 2009/10/02 16:03:53 UTC
Re: [Struts2] Problem using Struts2 with EJB3 over ServiceLocator
(Jboss say Caller unauthorized)
How are you getting a copy of your EJB in your action?
vwg.yyy.cancard.ui.action.Usermanagement.Usermanagement.list(Userman
agement.java:41)
That line in the stacktrace indicates that you are in the action when
you get the error, but the stacktrace dives down into a proxied object
after that. You do realize that you can't use the standard @Remote /
@Local on struts 2 action properties? Struts 2 creates it's own
objects so any JEE annotations are probably not going to work.
-Wes
On Fri, Oct 2, 2009 at 4:09 AM, Michael Obster <mi...@obster.org> wrote:
> Hi everybody,
>
> After I have written some mails to JBoss security forum, I found out that
> the Servlet has a problem. As I can see that has to do with the usage of
> Struts 2 because another application with Struts 1 works.
>
> The problem I don't know where I can continue to resolve the problem an
> wanted to ask if someone can help?
>
> -----------------------------------
> Mail 1:
>
> I have a big problem using JAAS in JBoss 5.1.0GA, which I try to solve about
> 2 days (my employer is not very amused of that...). I use a own
> JASSLoginModule to authenticate a user on a LDAP directory. The roleSet is
> fetched from a database. This part works as I can see and give me the result
> - "AdminUser".
>
> But now when I call a EJB stateless session bean, I always get the Caller
> unauthorized error (Stacktrace is at bottom of the message).
>
> Can anybody give me a hint whats wrong.
>
> The Constants in the @RolesAllowed has "AdminUser" in the list. The class is
> also attached at the end of the message.
>
> <<error-statcktrace.txt>>
>
> <<UserFacadeBean.java>>
>
> ------------------------------------
> Reply 1: From Wolfgang Knauf
>
> Hi Michael,
>
> you probably checked the JBoss log of the security layer (see question 4 in
> FAQ)? Do you see output that JBoss could map a user to the required roles?
>
> Please post the relevant snippets of your login module.
>
> Best regards
>
> Wolfgang
>
> -------------------------------------
> Mail 2:
>
> Some new output was generated after enabling debugging. But the only thing I
> can see, that the error is not in the login module but somewhere in the
> servlet container.
>
> Is there something special that I have to pay attention when I'm using
> Struts2 as framework?
>
> <<error-stacktrace-with-security-debugging.txt>>
>
> --------------------------------------
> Mail 3:
>
> My web.xml:
> <<web.xml>>
>
> And the struts2 interceptor I use on sites you have to be logged in:
> JaasLoginInterceptor:
> <<JAASLoginInterceptor.java>>
>
> ---------------------------------------
>
> Hope anyone has a hint what I'm doing wrong.
>
> Kind regards,
> Michael Obster
>
>
> javax.ejb.EJBAccessException: Caller unauthorized
> at
> org.jboss.ejb3.security.RoleBasedAuthorizationInterceptorv2.invoke(Ro
> leBasedAuthorizationInterceptorv2.java:199)
> at
> org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.
> java:102)
> at
> org.jboss.ejb3.security.Ejb3AuthenticationInterceptorv2.invoke(Ejb3Au
> thenticationInterceptorv2.java:186)
> at
> org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.
> java:102)
> at
> org.jboss.ejb3.ENCPropagationInterceptor.invoke(ENCPropagationInterce
> ptor.java:41)
> at
> org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.
> java:102)
> at
> org.jboss.ejb3.BlockContainerShutdownInterceptor.invoke(BlockContaine
> rShutdownInterceptor.java:67)
> at
> org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.
> java:102)
> at
> org.jboss.aspects.currentinvocation.CurrentInvocationInterceptor.invo
> ke(CurrentInvocationInterceptor.java:67)
> at
> org.jboss.aop.joinpoint.MethodInvocation.invokeNext(MethodInvocation.
> java:102)
> at
> org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContain
> er.java:176)
> at
> org.jboss.ejb3.session.SessionSpecContainer.invoke(SessionSpecContain
> er.java:216)
> at
> org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandl
> erBase.invoke(SessionProxyInvocationHandlerBase.java:207)
> at
> org.jboss.ejb3.proxy.impl.handler.session.SessionProxyInvocationHandl
> erBase.invoke(SessionProxyInvocationHandlerBase.java:164)
> at $Proxy1287.getAllUsers(Unknown Source)
> at
> vwg.yyy.cancard.ui.action.Usermanagement.Usermanagement.list(Userman
> agement.java:41)
> at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
> java:39)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
> sorImpl.java:25)
> at java.lang.reflect.Method.invoke(Method.java:597)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultA
> ctionInvocation.java:404)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(Defa
> ultActionInvocation.java:267)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:229)
> at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInte
> rcept(DefaultWorkflowInterceptor.java:221)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(V
> alidationInterceptor.java:150)
> at
> org.apache.struts2.interceptor.validation.AnnotationValidationInterce
> ptor.doIntercept(AnnotationValidationInterceptor.java:48)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interc
> ept(ConversionErrorInterceptor.java:123)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept
> (ParametersInterceptor.java:167)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.inter
> cept(StaticParametersInterceptor.java:105)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(Checkbox
> Interceptor.java:83)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUp
> loadInterceptor.java:207)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(
> ModelDrivenInterceptor.java:74)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.inte
> rcept(ScopedModelDrivenInterceptor.java:127)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.ProfilingActivationInterceptor.interce
> pt(ProfilingActivationInterceptor.java:107)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.interce
> pt(DebuggingInterceptor.java:206)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Cha
> iningInterceptor.java:115)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInt
> erceptor.java:143)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pr
> epareInterceptor.java:121)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Ser
> vletConfigInterceptor.java:170)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasI
> nterceptor.java:123)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.inter
> cept(ExceptionMappingInterceptor.java:176)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> vwg.yyy.cancard.ui.interceptor.RolecheckUsermanagerInterceptor.conti
> nueAction(RolecheckUsermanagerInterceptor.java:86)
> at
> vwg.yyy.cancard.ui.interceptor.RolecheckUsermanagerInterceptor.inter
> cept(RolecheckUsermanagerInterceptor.java:71)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> vwg.yyy.cancard.ui.interceptor.JAASLoginInterceptor.intercept(JAASLo
> ginInterceptor.java:78)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doInte
> rcept(DefaultWorkflowInterceptor.java:221)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(V
> alidationInterceptor.java:150)
> at
> org.apache.struts2.interceptor.validation.AnnotationValidationInterce
> ptor.doIntercept(AnnotationValidationInterceptor.java:48)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.interc
> ept(ConversionErrorInterceptor.java:123)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept
> (ParametersInterceptor.java:167)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.inter
> cept(StaticParametersInterceptor.java:105)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(Checkbox
> Interceptor.java:83)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUp
> loadInterceptor.java:207)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(
> ModelDrivenInterceptor.java:74)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(Cha
> iningInterceptor.java:115)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInt
> erceptor.java:143)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(Pr
> epareInterceptor.java:121)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(Ser
> vletConfigInterceptor.java:170)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept
> (ParametersInterceptor.java:167)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasI
> nterceptor.java:123)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.inter
> cept(ExceptionMappingInterceptor.java:176)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> vwg.yyy.cancard.ui.interceptor.RedirectMessageInterceptor.doIntercep
> t(RedirectMessageInterceptor.java:51)
> at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept
> (MethodFilterInterceptor.java:86)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:224)
> at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(Default
> ActionInvocation.java:223)
> at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTim
> erStack.java:455)
> at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionI
> nvocation.java:221)
> at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.j
> ava:50)
> at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.jav
> a:504)
> at
> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatc
> her.java:419)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:235)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:206)
> at
> org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFi
> lter.java:96)
> at
> org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
> icationFilterChain.java:235)
> at
> org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
> ilterChain.java:206)
> at
> org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
> alve.java:235)
> at
> org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
> alve.java:191)
> at
> org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Securit
> yAssociationValve.java:190)
> at
> org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValv
> e.java:92)
> at
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.proce
> ss(SecurityContextEstablishmentValve.java:126)
> at
> org.jboss.web.tomcat.security.SecurityContextEstablishmentValve.invok
> e(SecurityContextEstablishmentValve.java:70)
> at
> org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
> ava:127)
> at
> org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
> ava:102)
> at
> org.jboss.web.tomcat.service.jca.CachedConnectionValve.invoke(CachedC
> onnectionValve.java:158)
> at
> org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
> ve.java:109)
> at
> org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
> a:330)
> at
> org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
> :829)
> at
> org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.proce
> ss(Http11Protocol.java:598)
> at
> org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:44
> 7)
> at java.lang.Thread.run(Thread.java:619)
> /**
> *
> */
> package vwg.yyy.cancard.business.facade;
>
> import java.util.ArrayList;
> import java.util.List;
> import java.util.Set;
>
> import javax.annotation.PostConstruct;
> import javax.annotation.Resource;
> import javax.annotation.security.RolesAllowed;
> import javax.annotation.security.RunAs;
> import javax.ejb.EJB;
> import javax.ejb.Local;
> import javax.ejb.Remote;
> import javax.ejb.SessionContext;
> import javax.ejb.Stateless;
> import javax.persistence.EntityExistsException;
> import javax.persistence.EntityNotFoundException;
> import javax.security.auth.Subject;
> import javax.security.jacc.PolicyContext;
> import javax.security.jacc.PolicyContextException;
>
> import org.apache.log4j.Logger;
> import org.hibernate.exception.ConstraintViolationException;
> import org.jboss.ejb3.annotation.SecurityDomain;
> import org.jboss.security.auth.spi.ADLoginIdentifier;
>
> import vwg.yyy.cancard.ApplicationConstants;
> import vwg.yyy.cancard.MyApplicationException;
> import vwg.yyy.cancard.business.user.TooManyHitsException;
> import vwg.yyy.cancard.dao.ApplicationRoleDao;
> import vwg.yyy.cancard.dao.ApplicationUserDao;
> import vwg.yyy.cancard.dao.DAOFactory;
> import vwg.yyy.cancard.ldap.LDAPSearcher;
> import vwg.yyy.cancard.model.basic.ApplicationRole;
> import vwg.yyy.cancard.model.basic.ApplicationUser;
>
>
> /**
> * Implementation of user service interface.
> *
> * @author Michael Obster (michael.obster@epos-cat.de)
> */
> @SecurityDomain("java:/jaas/cancardDomain")
> @RolesAllowed({ApplicationConstants.ROLE_ADMIN,
> ApplicationConstants.ROLE_NORMAL, "internal"})
> @RunAs("internal")
> @Local({UserFacade.class})
> @Remote({UserFacadeRemote.class})
> @Stateless
> public class UserFacadeBean implements UserFacade {
> private static final String SUBJECT_CONTEXT_KEY =
> "javax.security.auth.Subject.container";
>
> private static Logger log = Logger.getLogger(UserFacadeBean.class);
>
> /**
> * Session context for security checks.
> */
> @Resource
> private SessionContext ctx;
>
> @EJB
> private DAOFactory daoFactory;
>
> private ApplicationUserDao userDao;
> private ApplicationRoleDao roleDao;
>
> /**
> * Inits the daos.
> */
> @PostConstruct
> public void initDao() {
> userDao = daoFactory.getApplicationUserDao();
> roleDao = daoFactory.getApplicationRoleDao();
> }
>
> public List<ApplicationUser> getAllUsers() {
> return userDao.findAllOrdered("lastname, firstname");
> }
>
> public ApplicationUser saveUser(ApplicationUser user, boolean
> updateZebra) {
> if (updateZebra) {
> // Update current user from zebra
> LDAPSearcher searcher = new LDAPSearcher();
> searcher.updateUserAD(user);
> }
> return userDao.merge(user);
> }
>
> public boolean deleteUser(String gid) {
> try {
> userDao.remove(gid);
> } catch (EntityNotFoundException e) {
> log.debug(e);
> throw new MyApplicationException("db.alreadydeleted");
> } catch (EntityExistsException e) {
> log.debug(e.getCause());
> if (e.getCause() instanceof ConstraintViolationException) {
> // User still used elsewhere
> throw new MyApplicationException("db.stillused");
> }
> else {
> // Should never happen
> throw (EntityExistsException) e.fillInStackTrace();
> }
> }
> return true;
> }
>
> public ApplicationUser findUserById(String userId) throws
> EntityNotFoundException {
> return userDao.findById(userId);
> }
>
> public ApplicationUser findFullUserById(String userId) throws
> EntityNotFoundException {
> ApplicationUser user = userDao.findById(userId);
> return userDao.fetchFullUser(user);
> }
>
> public List<ApplicationRole> getAllRoles() {
> return roleDao.findAllOrdered("reihe");
> }
>
> public List<ApplicationUser> findDirectoryUsers(ApplicationUser user)
> throws TooManyHitsException {
> LDAPSearcher searcher = new LDAPSearcher();
> return searcher.findByCriteriaAD(user);
> }
>
> public ApplicationUser findDirectoryUser(String userId) {
> LDAPSearcher searcher = new LDAPSearcher();
> ApplicationUser user = new ApplicationUser();
> user.setId(userId);
> searcher.updateUserAD(user);
> return user;
> }
>
> @Override
> public List<ApplicationUser> findByCriteria(String firstname,
> String lastname, String department, String phone,
> String email, String id) {
> LDAPSearcher searcher = new LDAPSearcher();
> return searcher.findByCriteria(firstname, lastname,
> department, phone, email, id);
> }
>
> @Override
> public List<ApplicationRole> getRolesNotUser(ApplicationUser user) {
> user = userDao.fetchFullUser(user);
> return roleDao.findNonRolesOfUser(user);
> }
>
> @Override
> public List<ApplicationRole> getUserRoles(ApplicationUser user) {
> user = userDao.fetchFullUser(user);
> return new ArrayList<ApplicationRole>(user.getRole());
> }
>
> @Override
> public boolean addRole(ApplicationRole role, ApplicationUser user) {
> user = userDao.fetchFullUser(user);
> return userDao.linkRoleToUser(role, user);
> }
>
> @Override
> public boolean deleteRole(ApplicationRole role, ApplicationUser user)
> {
> user = userDao.fetchFullUser(user);
> return userDao.unlinkRoleToUser(role, user);
> }
>
> @Override
> public ApplicationRole findRoleById(String roleId)
> throws EntityNotFoundException {
> return roleDao.findById(roleId);
> }
>
> public void updateUser() throws MyApplicationException {
> // Get user from DB
> LDAPSearcher searcher = new LDAPSearcher();
> ApplicationUser dbUser=null;
> try {
> dbUser = userDao.findById(getUserId(ctx));
> }
> catch(EntityNotFoundException e) {
> throw new MyApplicationException("User not found in database.",
> e);
> }
>
> // Get current user data from zebra
> // searcher.updateUserAD(dbUser);
>
> // Save user
> // userDao.merge(dbUser);
> }
>
> /**
> * Static helper method: Get userId from EJB context.
> *
> * @param ctx SessionContext for no-ad-case
> * @return userId
> */
> public static String getUserId(SessionContext ctx) {
> try {
> Subject subject = (Subject)
> PolicyContext.getContext(UserFacadeBean.SUBJECT_CONTEXT_KEY)
> ;
> Set<ADLoginIdentifier> pc =
> subject.getPublicCredentials(ADLoginIdentifier.class);
> if (pc == null || pc.isEmpty()) {
> /*
> * Should only happen in JUnit case, return user name as GID
> * NOT dangerous because:
> * - Spiider is the only login method on production server
> * - The following update from Zebra will fail and throw an
> Exception
> */
> log.warn("Logging in without ADLoginIdentifier, should only
> happen in JUnit test!");
> return ctx.getCallerPrincipal().getName();
> }
> else {
> return pc.iterator().next().getUserId();
> }
> } catch (PolicyContextException e) {
> throw new MyApplicationException("Jaas subject could not be
> retrieved.", e);
> }
> }
>
> @Override
> public boolean userHasRole(ApplicationRole role, ApplicationUser
> user) {
> user = userDao.fetchFullUser(user);
> Set<ApplicationRole> roles = user.getRole();
> if (roles.contains(role)) {
> return true;
> }
> else {
> return false;
> }
> }
>
> @Override
> public ApplicationRole getRolesById(String roleid) {
> ApplicationRole role = roleDao.findById(roleid);
> return role;
> }
>
> }
>
> ...
> 16:01:50,566 INFO [SpiiderLoginModule] Logged into LDAP server,
> javax.naming.ld
> ap.InitialLdapContext@6857da
> 16:01:50,581 INFO [SpiiderLoginModule] getRoleSets using rolesQuery: SELECT
> u.u
> serid, r."role" FROM "security".application_user u,
> "security".application_role
> r, "security".user_role ur WHERE u.userid = ? AND u.userid = ur.user_id AND
> ur.r
> ole_id = r."role", gid: 79A44E672EA8C49B
> 16:01:50,769 ERROR [[default]] Servlet.service() for servlet default threw
> excep
> tion
> javax.ejb.EJBAccessException: Caller unauthorized
> ...
>
> /**
> *
> */
> package vwg.audi.cancard.ui.interceptor;
>
> import javax.servlet.http.HttpServletRequest;
>
> import org.apache.log4j.Logger;
> import org.apache.struts2.ServletActionContext;
>
> import vwg.yyy.cancard.business.LoginFacade;
> import vwg.yyy.cancard.ui.JAASConstants;
>
> import com.opensymphony.xwork2.Action;
> import com.opensymphony.xwork2.ActionInvocation;
> import com.opensymphony.xwork2.interceptor.Interceptor;
>
> /**
> * JAASLoginFilter
> *
> * @author Michael Obster
> */
> public class JAASLoginInterceptor implements Interceptor {
>
> private static final long serialVersionUID = -1983088770872827621L;
>
> private Logger log = Logger.getLogger(this.getClass());
>
> String loginDomain = "";
> String clientLoginDomain = "";
>
> LoginFacade loginFacade;
>
> @Override
> public void init() {
>
> }
>
> @Override
> public String intercept(ActionInvocation actionInvocation) throws
> Exception {
> loginDomain =
> ServletActionContext.getServletContext().getInitParameter("jaasLoginDomain");
> clientLoginDomain =
> ServletActionContext.getServletContext().getInitParameter("jaasClientLoginDomain");
> if (log.isDebugEnabled()) {
> log.debug("init JAASInterceptor: loginDomain:" +
> loginDomain + " clientLoginDomain:" + clientLoginDomain);
> }
>
> HttpServletRequest request =
> ServletActionContext.getRequest();
> String servletPath = request.getServletPath();
> String pathInfo = request.getPathInfo();
> String path = (servletPath == null ? "" : servletPath)
> + (pathInfo == null ? "" : pathInfo);
> if (log.isDebugEnabled()) {
> log.debug("Login INTERCEPT");
> }
> loginFacade = new LoginFacade(loginDomain,
> clientLoginDomain);
>
>
> if (!JAASConstants.USER_IS_VALID.equals(request
> .getSession().getAttribute(
>
> JAASConstants.USER_VALIDITY))) {
> log.info("requested path: " + path);
> return Action.LOGIN;
> }
>
> //Perform client-login
> String username =
> (String)request.getSession().getAttribute(JAASConstants.USERNAME);
> String strPassword =
> (String)request.getSession().getAttribute(JAASConstants.PASSWORD);
>
> // Classic login by username and password
> loginFacade.clientLogin(username, strPassword);
> if (log.isDebugEnabled()) {
> log.debug("*****CLIENTLOGIN COMPLETE****");
> }
>
> return actionInvocation.invoke();
> }
>
> @Override
> public void destroy() {
> loginFacade.logout();
> }
>
>
>
> }
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
> For additional commands, e-mail: user-help@struts.apache.org
>
--
Wes Wannemacher
Head Engineer, WanTii, Inc.
Need Training? Struts, Spring, Maven, Tomcat...
Ask me for a quote!
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
RE: [Struts2] Problem using Struts2 with EJB3 over ServiceLocator (Jboss say Caller unauthorized)
Posted by Fernandes Celinio <cf...@sopragroup.com>.
Hi Michael,
Did you fix your problem ?
If yes, what was wrong ?
-----Message d'origine-----
De : Michael Obster [mailto:michael@obster.org]
Envoyé : vendredi 2 octobre 2009 17:42
À : Struts Users Mailing List
Objet : Re: [Struts2] Problem using Struts2 with EJB3 over ServiceLocator (Jboss say Caller unauthorized)
Hi Wes,
I'm accessing the bean over a service locator. I have attached the class source at the end.
Regards,
Michael
Wes Wannemacher schrieb:
> How are you getting a copy of your EJB in your action?
>
> vwg.yyy.cancard.ui.action.Usermanagement.Usermanagement.list(Userman
> agement.java:41)
>
> That line in the stacktrace indicates that you are in the action when
> you get the error, but the stacktrace dives down into a proxied object
> after that. You do realize that you can't use the standard @Remote /
> @Local on struts 2 action properties? Struts 2 creates it's own
> objects so any JEE annotations are probably not going to work.
>
> -Wes
>
---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@struts.apache.org
For additional commands, e-mail: user-help@struts.apache.org
Re: [Struts2] Problem using Struts2 with EJB3 over ServiceLocator
(Jboss say Caller unauthorized)
Posted by Michael Obster <mi...@obster.org>.
Hi Wes,
I'm accessing the bean over a service locator. I have attached the class
source at the end.
Regards,
Michael
Wes Wannemacher schrieb:
> How are you getting a copy of your EJB in your action?
>
> vwg.yyy.cancard.ui.action.Usermanagement.Usermanagement.list(Userman
> agement.java:41)
>
> That line in the stacktrace indicates that you are in the action when
> you get the error, but the stacktrace dives down into a proxied object
> after that. You do realize that you can't use the standard @Remote /
> @Local on struts 2 action properties? Struts 2 creates it's own
> objects so any JEE annotations are probably not going to work.
>
> -Wes
>