struts-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From MLENEV...@abusinessware.com
Subject [S2][interceptors]Inserted my own interceptor => no more params value
Date Mon, 23 Apr 2007 06:36:50 GMT
Hi all,

I try to insert my "AuthentificatedInterceptor" in the stack, but now 
nothing works.

First, I had a login page, with login/password fields, and the LoginAction 
getted well the parameters' value. 

Now, with my new Interceptor, the LoginAction gets empty values from my 
login and password fields.

What's wrong ? I tried a lot of order's combinations in the stack, but I 
did'nt find the good one. 

My login.jsp :
        <s:form action="login" validate="true">
            <table border="0" cellspacing="0" cellpadding="0" 
align="center" width="400"> 
                <s:hidden name="user.loginAttempt" value="%{'1'}" />
                <s:actionerror/>
                <s:textfield label="%{getText('login.login ')}" 
name="user.login" size="20" maxlength="20" tabindex="1"/>
                <s:password label="%{getText('login.pwd')}" 
name="user.pwd" size="20" maxlength="20" tabindex="2"/> 
                <s:submit label="%{getText('login.submit')}" 
method="login">
                    <s:param name="colspan" value="%{2}" />
                    <s:param name="align" value="%{'center'}" /> 
                </s:submit>
            </table>
        </s:form>

My LoginAction.java :
public class LoginAction extends ActionSupport implements 
ServletRequestAware {
    private Logger log = Logger.getLogger(LoginAction.class);
    private HttpServletRequest request;
    private UserVO user;
    private AuthentifyUserServiceInterface authentifyUserService;
    
    public String login () {
        String vTarget; 
        try {
            // Call the Service layer for authentification.
            if (authentifyUserService.authentifyUser(user)) {
                setSessionAttribute(request, Constants.USER, user.getLogin 
());
                vTarget = SUCCESS;
            } else {
                addActionError(getText("errors.loginko"));
                vTarget = INPUT;
            }
        }
        catch (TechnicalException e) { 
            addActionError(getText("error.message"));
            vTarget = ERROR;
        }
        return vTarget;
    }
    protected void setSessionAttribute(HttpServletRequest request, String 
key, Object o) { 
        if(o != null) {
            request.getSession().setAttribute(key, o);
        }
    }
    public void setUser(UserVO user) {
        this.user = user;
    }
    public void setAuthentifyUserService( 
            AuthentifyUserServiceInterface authentifyUserService) {
        this.authentifyUserService = authentifyUserService;
    }
    public void setServletRequest(HttpServletRequest request) {
        this.request = request;
    }
}

My LoginInterceptor.java :
public class LoginInterceptor extends AbstractInterceptor implements 
StrutsStatics {
    private static final String LOGIN_ATTEMPT = "user.loginAttempt ";

    public String intercept (ActionInvocation invocation) throws Exception 
{
        final ActionContext context = invocation.getInvocationContext ();
        HttpServletRequest request = (HttpServletRequest) 
context.get(HTTP_REQUEST);
        HttpSession session =  request.getSession (true);

        Object user = session.getAttribute(Constants.USER);
        if (user == null) {
            String loginAttempt = request.getParameter (LOGIN_ATTEMPT);
            if (! StringUtils.isBlank (loginAttempt) ) {
                return invocation.invoke ();
            }
            return "notLogged";
        } else { 
            return invocation.invoke();
        }
    }
}

My struts.xml :
<interceptors>
            <interceptor name="login" 
class="com.abw.util.LoginInterceptor" /> 

            <interceptor-stack name="crmStack">
                <interceptor-ref name="exception"/>
                <interceptor-ref name="alias"/>
                <interceptor-ref name="servlet-config" /> 
                <interceptor-ref name="login" />
                <interceptor-ref name="i18n"/>
                <interceptor-ref name="prepare" />
                <interceptor-ref name="chain" /> 
                <interceptor-ref name="model-driven" />
                <interceptor-ref name="fileUpload" />
                <interceptor-ref name="checkbox"/>
                <interceptor-ref name="static-params" />
                <interceptor-ref name="params" />
                <interceptor-ref name="conversionError" />
                <interceptor-ref name="validation" />
                <interceptor-ref name="workflow" />
            </interceptor-stack>
        </interceptors>

        <default-interceptor-ref name="crmStack"/>

The fact is that first I would like to have the hidden parameter in the 
login.jsp being not an attribute in the userVO bean. But if I set 
<s:hidden name="somethingOther" value="%{'1'}" />, I have a 
ParametersInterceptor Exception saying "ParametersInterceptor - 
[setParameters]: Unexpected Exception catched". 

Then, How could I have my values in my LoginAction ? I would like to do 
the authentifyUserService.authentifyUser() in the Action, not in the 
Interceptor. And I suppose this will allow me to have my values in my 
others forms too. 

Thanks for your help.

Regards,

Michaƫl. 
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message