zoukankan      html  css  js  c++  java
  • 【SSH】——struts2 拦截器

            Struts 2拦截器是在程序访问某个action或者action的某个方法,字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。



    拦截器的工作方式:

    Struts2拦截器围绕着Action和Result的执行而执行,当请求Struts2的Action 或返回result时,struts2会查找配置文件,并根据其配置实例化相应的拦截器对象,然后把这些对象串成一个列表,最后一个个的调用列表中的拦截器。其中Struts2的拦截器包括自带拦截器和自定义拦截器。Struts2默认18个拦截器,其他的都是自定义的。下面将通过SSH网上商城的一个实例来学习Struts2拦截器。

    自定义拦截器:

    后台权限校验拦截器:可以对Action的访问进行拦截,对没有登陆的用户进行拦截,判断的时候就判断session中是否保存了用户的信息。

    自定义一个拦截器需要三步:
    1 自定义一个实现Interceptor接口的类。
    2 在strutx.xml中注册上一步中定义的拦截器。
    3 在需要使用的Action中引用上述定义的拦截器

    (1)首先创建一个包,命名为interceptor


    (2)新建一个类,命名为PrivilegeInterceptor


    (3)在PrivilegeInterceptor开始编写代码:对没有登陆的用户进行拦截,并跳转到后台登陆的界面。如何判断用户是否登陆,判断session中是否保存了后台用户的信息,如果有,则说明登陆了,反之,没有登陆。

    * 编写一个类实现Interceptor接口.或者继承Interceptor的子类.

    <strong><span style="font-size:18px;">package cn.itcast.shop.interceptor;
    
    import org.apache.struts2.ServletActionContext;
    
    import cn.itcast.shop.adminuser.vo.AdminUser;
    
    import com.opensymphony.xwork2.ActionInvocation;
    import com.opensymphony.xwork2.ActionSupport;
    import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;
    
    /**
     * 后台权限的拦截器
     * 对没有登陆的用户,不可进行访问
     * @author CXC
     *
     */
    public class PrivilegeInterceptor extends MethodFilterInterceptor{
    
    	@Override
    	//执行拦截的方法:
    	protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
    		// 判断session中是否保存了后台用户的信息
    		AdminUser existAdminUser=(AdminUser) ServletActionContext.getRequest().getSession().getAttribute("existAdminUser");
    		if(existAdminUser == null){
    			//没有登陆进行访问
    			ActionSupport actionSupport=(ActionSupport) actionInvocation.getAction();
    			actionSupport.addActionError("亲,您还没有登陆!没有权限访问!");
    			return "loginFail";		
    		}else{
    			//已经登陆过
    			return actionInvocation.invoke();
    		}
    		
    	}
    
    }
    </span></strong>
    (4)在struts 2中编写代码:定义拦截器:

    <strong><span style="font-size:18px;"><!-- 配置自定义拦截器 -->
    			<interceptors>
    			<interceptor name="privilegeInterceptor" class="cn.itcast.shop.interceptor.PrivilegeInterceptor"/>
    			</interceptors></span></strong>

    (5)在需要添加拦截的地方引用拦截器或拦截器栈即可,应用拦截器,在后台action中除了后台登陆的action中都需要添加,对拦截器进行配置。


    达到的效果:



    总结:

    Struts2拦截器可以说相当于是个过滤器:就是把不想要的或不想显示的内容给过滤掉。拦截器可以抽象出一部分代码可以用来完善原来的action,同时可以减轻代码冗余,提高重用率。


  • 相关阅读:
    python input函数
    linux可用内存判断
    python if-elif-else 判断
    python if判断
    python使用range()函数创建数字列表list
    python range函数
    python语法缩进
    python for循环
    python列表删除和排序
    hbctf 父亲的信
  • 原文地址:https://www.cnblogs.com/chenxiaochan/p/7237593.html
Copyright © 2011-2022 走看看