实现拦截器struts 2过滤所有操作字段数据

时间:2016-03-08 01:52:35

标签: interceptor

我已经在struts 2中实现了我的第一个拦截器。我认为它非常基本但是当它在动作之前运行时,动作字段都被设置为null。 不确定我做错了什么 我的拦截器类是

public class LoginInterceptor extends AbstractInterceptor {

private static final long serialVersionUID = 1L;
private static final Logger log = Logger.getLogger(LoginInterceptor.class);

@Override
public String intercept(final ActionInvocation invocation) throws Exception {
    Map<String, Object> session = ActionContext.getContext().getSession();
    User user = SessionUtilities.getUser(session);

    if (user != null) {
        return invocation.invoke(); 
    }

    Object action = invocation.getAction();
    if (!(action instanceof LoginAction)) { 
        return "loginRedirect";
    }
    return invocation.invoke();
}

}

我的struts.xml文件是

    <interceptors>
        <interceptor name="login" class="ar.com.cipres.framework.logic.LoginInterceptor"/>
        <interceptor-stack name="loginStack">
            <interceptor-ref name="login"/>
        </interceptor-stack>        
    </interceptors>

    <default-action-ref name="go.home" />


    <global-results>
        <result name="loginRedirect" type="redirect">go.loginform.action</result>
        <result name="exception" type="redirect">exception.jsp</result>
    </global-results>

最后我的一个有问题的操作被配置为

    <action name="go.asociate.form" method="prepareAsociateData" class="ar.com.cipres.chacabuco.asociate.AsociateAction">
        <interceptor-ref name="loginStack"></interceptor-ref>
        <result name="success">chaca/socios/asociateupdate.jsp</result>
    </action>

到目前为止有任何评论吗?

谢谢

1 个答案:

答案 0 :(得分:0)

我想我发现了这个问题 我必须包含声明新的时删除的defaulStack。

所以我需要修改我的struts.xml文件

<interceptors>
    <interceptor name="login" class="ar.com.cipres.framework.logic.LoginInterceptor"/>
    <interceptor-stack name="loginStack">
        <interceptor-ref name="login"/>
        <interceptor-ref name="defaultStack"/> <!-- Need to be added to mantain default functionality -->         
    </interceptor-stack>        
</interceptors>

稍后再试