Struts2自定义拦截器

Struts2自定义拦截器

概述

  • Struts2 拦截器在访问某个 Action 方法之前或之后实施拦截, Struts2 拦截器是 可插拔的, 拦截器是 AOP 的一种实现。
  • 拦截器栈(Interceptor Stack): 将拦截器按一定的顺序联结成一条链. 在访问被拦 截的方法时, Struts2拦截器链中的拦截器就会按其之前定义的顺序被依次调用。

自定义拦截器

  • Interceptor 接口

com.opensymphony.xwork2.interceptor.Interceptor

阅读该接口API, 所有的自定义拦截器都需要实现该接口,且以单例运行。

init: 创建后初始化时被调用, 它在拦截器的生命周期内只被调用一次。

interecept: 每拦截一个动作请求, 该方法就会被调用一次。

destroy: 拦截器被销毁之前被调用, 它在拦截器的生命周期内也只被调用一次.

  • Struts2 自定义拦截器实现
    1. 定义一个类实现Interceptor接口
    2. 实现生命周期方法
    3. 声明和引用自定义拦截器
  • 拦截器类
/**
 * 登录拦截器
 */
public class LoginInterceptor implements Interceptor {
	private static final long serialVersionUID = 286019271181543787L;

	public void destroy() {
	}

	public void init() {
	}

	public String intercept(ActionInvocation invocation) throws Exception {
		Object action = invocation.getAction();
		//如果是达到登录或者注册的action,则直接放行
		if (action instanceof LoginAction || action instanceof RegAction) {
			return invocation.invoke();
		}

		Map<String, Object> sessionMap = invocation.getInvocationContext().getSession();
		//如果没有登录
		if (sessionMap.get("username") == null) {
			return "login";
		}
		//放行
		else {
			return invocation.invoke();
		}
	}
}
  • 拦截器配置
<?xml version="1.0"?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
    "http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts>
    <package name="LoginPkg" namespace="/login" extends="struts-default">
        <interceptors>
            <!-- 注册拦截器 -->
            <interceptor name="loginInterceptor" class="cn.csx.web.interceptor.LoginInterceptor" />
            
            <!-- 自定义拦截器栈 -->
            <interceptor-stack name="loginStack">
                <interceptor-ref name="loginInterceptor" />
                <interceptor-ref name="defaultStack" />
            </interceptor-stack>
        </interceptors>
        <!-- 定义默认栈 -->
        <default-interceptor-ref name="loginStack" />
        
        <!-- 定义全局结果 -->
        <global-results>
            <result name="login">/login.jsp</result>
        </global-results>
        
        <!-- 注册登录action -->
        <action name="LoginAction_*" class="cn.csx.web.interceptor.LoginAction" method="{1}">
            <result name="success">/success.jsp</result>
            <result name="loginView">/login.jsp</result>
        </action>
    </package>
</struts>
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值