您的位置:首页 > 编程语言 > Java开发

struts2 拦截器interceptor

2015-12-11 15:36 441 查看

1.自定义拦截器

@SuppressWarnings("serial")
public class SessionInterceptor extends AbstractInterceptor {
private static final Object LOGIN_KEY = "admin";
public static final String LOGIN_PAGE = "loginPage";

@Override
public String intercept(ActionInvocation actionInvocation) throws Exception {
Map session = actionInvocation.getInvocationContext().getSession();
Admin admin = (Admin) session.get(LOGIN_KEY);
if (admin != null) {
return actionInvocation.invoke();
} else {
return LOGIN_PAGE;
}
}
}

 2.配置拦截器

 

    有三种配置方法:

方法1. 普通配置法

<struts>
<package name="struts2" extends="struts-default">
<interceptors>
<interceptor name="myInterceptor" class="SessionInterceptor"></interceptor>
</interceptors>

<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>

<!-- 在自定义interceptor并将其ref时, 系统会覆盖掉默认的interceptor-stack(defaultStack), 为了保证系统默认的defaultStack不受印象, 我们需要显式的将其引入 -->
<!-- 注意两个interceptor-ref的顺序, 顺序不同, 执行效果也不同: 先配置的先执行/后配置的先退出(先进后出) -->
<interceptor-ref name="defaultStack"></interceptor-ref>
<interceptor-ref name="myInterceptor"></interceptor-ref>
</action>
</package>
</struts>

 

 方法2. 配置拦截器栈

<struts>
<package name="struts2" extends="struts-default">

<interceptors>
<interceptor name="myInterceptor" class="SessionInterceptor"></interceptor>

<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>

<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>

<interceptor-ref name="myInterceptorStack"></interceptor-ref>
</action>
</package>
</struts>

 

方法3. 修改默认拦截器,将自定义的拦截器栈定义为struts2的默认拦截器

<struts>
<package name="struts2" extends="struts-default">

<interceptors>
<interceptor name="myInterceptor" class="SessionInterceptor"></interceptor>
<interceptor-stack name="myInterceptorStack">
<interceptor-ref name="myInterceptor"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>

<!-- 此默认interceptor是针对所有action的 -->
<!-- 如果某个action中引入了interceptor, 则在这个action中此默认interceptor就会失效 -->
<default-interceptor-ref name="myInterceptorStack"></default-interceptor-ref>

<action name="register" class="edu.hust.action.RegisterAction">
<result name="input">/register.jsp</result>
<result>/result.jsp</result>
</action>

</package>
</struts>

 

 

 

 

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: