I'm having problems with chaining. I have tried several ways but none works. 
For instance:

1. http://localhost/mycontext/secure/protected => Login.jsp (${#request.url} is 
readable in jsp).

2. Login.jsp => submit (correct user/pwd) => ERROR: Infinite recursion 
detected: [//authenticate!authenticate, //, //] (url not available as request 
attribute)

When submitting, request attribute 'url' is not present in the action, I guess 
because result type of "input" is "dispatcher", not "chain", but using type 
"chain" with a JSP causes St2 to complain, and won't find any action. 

Pseudo-code:

INTERCEPTOR
        if (userInSession == null) {
            request.setAttribute("url", request.getServletPath());
            return "AUTHENTICATE";      
        }

        return invocation.invoke();

STRUTS.XML

 - package base, namespace ""
        - defines interceptor SECURE and default interceptor stack (SECURE, 
DEFAULTSTACK).
        - defines global result:
            <result name="AUTHENTICATE" type="chain">
                <param name="actionName">authenticate</param>
                <param name="namespace">/</param>
            </result>

 - package root extends base, namespace "/"
        <action name="authenticate" class...>
            <result type="chain">
                <param name="actionName">${#request.url}</param>
            </result>            
            <result name="input">/Login.jsp</result>
        </action>
        
 - package secure extends base, namespace "/secure"
        <action name="protected" class=...>
            <result>/secure/Protected.jsp</result>
        </action>    

ACTION AUTHENTICATE

        if (userInSession != null ) {
                request.getSession().setAttribute("USER_IN_SESSION", 
userInSession);
                //expecting original url is a request attribute
                return SUCCESS;
        } else {
            return INPUT;
        }

At the moment I've not been able to implement the requirement. 


El Miércoles, 10 de julio de 2013 10:07:36 Paul Benedict escribió:
> Forwarding to another action means you want to do chaining:
> http://struts.apache.org/release/2.3.x/docs/action-chaining.html
> 
> <result type="chain">
>     <param name="actionName">autenticar</param>
> </result>
> 
> 
> On Wed, Jul 10, 2013 at 10:00 AM, Antonio Sánchez
> <[email protected]>wrote:
> 
> > Can't forward even without using global results:
> >
> >  http://localhost:8084/mycontext/autenticar => login.jsp - OK
> >
> >         <action name="forward">
> >             <result>/autenticar</result>
> >         </action>
> >
> > http://localhost:8084/mycontext/forward => 404 ERROR -
> > /mycontext/autenticar not available
> >
> > Which is the right way to forward to actions?
> >
> > Using 2.3.15.
> >
> > El Miércoles, 10 de julio de 2013 15:29:51 usted escribió:
> > > > Second question: because it's a redirect, hence a new request.
> > >
> > > http://localhost:8084/mycontext/autenticar => login.jsp - OK
> > >
> > > Returned by interceptor:
> > >
> > >         <global-results>
> > >             <result name="AUTENTICAR">/autenticar</result>
> > >         </global-results>
> > >
> > > http://localhost:8084/mycontext/admin/protected => 404 ERROR -
> > /mycontext/autenticar not available
> > >
> > > How should I "forward" to actions?
> > >
> > >
> > >
> > > El Miércoles, 10 de julio de 2013 07:43:38 Dave Newton escribió:
> > > > Second question: because it's a redirect, hence a new request.
> > > >
> > > > Dave
> > > >  On Jul 10, 2013 7:28 AM, "Antonio Sánchez" <[email protected]>
> > > >
> > > > wrote:
> > > > > Use Case: request some protected resource -> redirect action for
> > > > > authentication -> access protected resource.
> > > > >
> > > > > I'm using a custom interceptor that redirects (redirectAction) to a
> > global
> > > > > result if no user object is found in session. The final action
> > result then
> > > > > redirects to a login page.
> > > > >
> > > > > The interceptor gets the original action requested (using
> > > > > request.getServletPath(), but not sure if this is right), and puts
> > it in
> > > > > the value stack. It would be used with dynamic redirection in the
> > final
> > > > > result upon login success( ${nextAction} ) . This action must be
> > passed in
> > > > > between redirections.
> > > > >
> > > > > But I need to reuse the original request. Reconstructing the request
> > with
> > > > > a query string is not an option. I need the original request:
> > GET/POST
> > > > > method, all parameters/values, maybe uploading binary content
> > > > > (inputstream), maybe headers...
> > > > >
> > > > > Is it possible to do this? How?
> > > > >
> > > > > ------
> > > > >
> > > > > Partially related to this: I'm having problems with redirections. The
> > > > > original request parameters are forwarded only using dispatcher
> > result .
> > > > > If
> > > > > I use redirectAction or redirect, original params are lost. Why?
> > > > >
> > > > > ---------------------------------------------------------------------
> > > > > To unsubscribe, e-mail: [email protected]
> > > > > For additional commands, e-mail: [email protected]
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [email protected]
> > For additional commands, e-mail: [email protected]
> >
> >
> 
> 
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to