struts2在struts.xml中为所有动作类添加拦截器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了struts2在struts.xml中为所有动作类添加拦截器相关的知识,希望对你有一定的参考价值。
我使用了Struts 2框架,并创建了一个具有登录页面的Web应用程序。我有三个不同的Action
类,名为Action1
,Action2
,Action3
,以及JSP页面的不同视图,这些视图通过在Action
类中运行一些业务逻辑来呈现。
现在,我想在Action
类执行处理之前检查用户是否已登录。所以,我在下面创建了一个拦截器工作正常。
public String intercept(ActionInvocation invocation) throws Exception
{
HttpServletRequest request = ServletActionContext.getRequest();
HttpServletResponse response = ServletActionContext.getResponse();
HttpSession session = request.getSession();
if(session.isNew())
{
response.sendRedirect("Login.action");
}
System.out.println("Interceptor Fired");
String result = invocation.invoke();
return result;
}
我想在struts.xml
中想要的不是为下面的所有动作添加拦截器
<interceptor-ref name="newStack"/>
我的struts.xml
文件有
<package name="default" extends="struts-default">
<interceptors>
<interceptor name="printMsgInterceptor" class="LoginInterceptor"></interceptor>
<interceptor-stack name="newStack">
<interceptor-ref name="printMsgInterceptor"/>
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<action name="actone" class="Action1">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="acttwo" class="Action2">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
<action name="actthree" class="Action3">
<result name="success">/success.jsp</result>
<interceptor-ref name="newStack"/>
</action>
</package>
对于每个动作,我想要在struts.xml
中编写一些定义来运行拦截器而不是手动添加
<interceptor-ref name="newStack"/>
<interceptor name="test" class="Full path for LoginInterceptor" />
<interceptor-stack name="testStack">
<interceptor-ref name="test"/>
<interceptor-ref name="defaultStack"/> //here you are including default stack
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="testStack"></default-interceptor-ref>
现在testStack
将针对每个请求执行
使用
<default-interceptor-ref name="newStack"/>
如果你没有为每个动作手动放置interceptor-ref
,你可以使用default-interceptor-ref
拦截所有未明确定义拦截器配置的动作。见How do we configure an Interceptor to be used with every Action。
我们可以创建自己的命名堆栈,甚至为包声明一个新的默认拦截器堆栈
<package name="default" extends="struts-default" > <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="timer"/> <interceptor-ref name="logger"/> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors>
但是,如果您说上面的拦截器工作正常,我会鼓励您对业务逻辑保持谨慎,如果第一次执行失败则不会执行登录操作。您应该检查已验证用户的结果,并将这些结果保存在您可以在拦截器中检查的会话中,而不是检查新会话。请参阅example的这个问题。
编写使用经过身份验证的用户信息的拦截器的示例,您可以找到here会话。
以上是关于struts2在struts.xml中为所有动作类添加拦截器的主要内容,如果未能解决你的问题,请参考以下文章