• struts2的拦截器(Interceptor)与过滤器(Filter)


    一.拦截器与过滤器的区别:
      1.filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于Java本身的反射机制,这是两者最本质的区别。
      2.filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
      3.Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。
      4.Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤。
    二.应用
    filter:常用于系统权限管理(即用户访问某些页面之前,进行Filter权限检查);
     Interceptor:只是在程序访问Action之前进行拦截。常用于记录系统操作日志,或添加额外功能。
    felter的三个实例:

    (1)-------<利用filter进行中文字符处理>------------
    1)
    在web.xml中的配置:
    <filter>
    <filter-name>encoding</filter-name>
    <filter-class>
    org.lxh.myzngt.filter.EncodingFilter
    </filter-class>
      <init-param>
    <param-name>charset</param-name>
    <param-value>gbk</param-value>
    </init-param>

    </filter>
    <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>
    private String[] doNotFilterURL;
    ?public void init(FilterConfig filterConfig) throws ServletException {
    String params = filterConfig.getInitParameter("doNotFilterURL");
    if (params != null) {
    String urls[] = params.split(",");
    doNotFilterURL = new String[urls.length];
    for (int i = 0, size = urls.length; i < size; i++) {
    doNotFilterURL[i] = urls[i];
    }
    }
    }


    HttpServletRequest req = (HttpServletRequest) request;
      String requestPath = req.getRequestURI(); //如:demo/login.action
      String contextRoot = req.getContextPath(); //如:demo
    int length = contextRoot.length();
      String path = requestPath.substring(length); //如:/login.action
    if (path != null && path.length() != 0) {
    path = path.trim();
    }

    if (Constants.FIRST_LOGIN_URL.getStringValue().equals(path)) {
    return true;
    }

    //获取请求的地址,比对不需要过滤的URL的数组doNotFilterURL。
    boolean doNotFilter = false;
    if (doNotFilterURL != null) {
    for (String url : doNotFilterURL) {
    if (url != null && path.contains(url.trim())) {
    doNotFilter = true;
    break;
    }
    }
    }
    //对不属于不用过滤的,查询数据表,看用户是否有权访问。若没,则返回提示用户无限访问页面。若有,则直接通过。
    }
  • 相关阅读:
    001-读书笔记-企业IT架构转型之道-阿里巴巴中台战略思想与架构实战-第一章 阿里巴巴集团中台战略引发的思考
    java-mybaits-011-mybatis-Interceptor-拦截器原理、统一赋值、计算耗时
    007-Redi-命令-脚本命令、链接命令、服务器命令、事务、HyperLogLog
    006-Redis 发布订阅
    005-redis-命令-4、无序集合,5、有序集合
    004-redis-命令-2、哈希操作命令,3、列表操作命令
    Ubuntu Server 14.04 --secure-file-priv error in MySql 解决方案
    Mysql Sql语句令某字段值等于原值加上一个字符串
    hdu 1281 二分图最大匹配
    hdu1045 DFS
  • 原文地址:https://www.cnblogs.com/Seachal/p/5362375.html
Copyright © 2020-2023  润新知