1.拦截器的原理
第一个 aop(面向切面的编程原理)
*在不改变源代码的情况下扩展功能
如图
第二个 责任链模式
(1)责任链模式类似于之前学习过滤链
过滤链:一个请求有多个过滤器进行过滤,每个过滤器只有放行操作才能到下一个过滤器
(2)什么是责任链模式
*责任链模式是java设计模式
*执行多个操作,比如添加操作,有修改操作,有删除操作,
** 这三个操作都要执行,执行顺序,第一个执行添加,第二个执行修改,第三个执行删除
** 首先执行添加操作,执行添加操作之后做放行操作,执行第二个修改操作,
修改执行之后做放行,执行删除操作
2.拦截器与过滤器的区别:(1)过滤器理论上可以过滤任意内容,比如action、jsp、图片路径
(2)拦截器只能拦截action(在action的方法之前执行)
案例(对登陆的用户检查是否已登陆,如果没有登陆返回登陆页面)
3.自定义拦截器(继承MethodFilterInterceptor类,重写里面的dointercept方法)
(1)判断session里面是否有值
public class LoginInterceptor extends MethodFilterInterceptor {
//拦截的方法,在这个方法里面写拦截器逻辑
protected String doIntercept(ActionInvocation invocation) throws Exception {
//判断session里面是否有值
HttpSession session = ServletActionContext.getRequest().getSession();
Object obj = session.getAttribute("username");
if(obj != null) {//登录状态
//放行操作
return invocation.invoke();
} else {
//不是登录
return "login";
}
}
}
2.在struts.xml核心文件中对拦截器进行配置
同时可以对所action的方式进行选择性的拦截