`
newleague
  • 浏览: 1505525 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

Filter应用+struts2x拦截器区别

阅读更多

 

版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://shenzhenchufa.blog.51cto.com/730213/269722
(1)
Filter与struts2x拦截器区别:
Filter:
当程序请求servlet,jsp时,Filter会进行拦截。程序将先经过filter后,才到达目标的servlet,jsp;常用于系统权限管理(即用户访问某些页面之前,进行Filter权限检查)
struts2x拦截器:
只是在程序访问Action之前进行拦截。常用于记录系统操作日志,或添加额外功能。
 
(2)
Filter简介:
Filter的三个方法:init(),destroy(),doFilter();
 
三个实例如下:
(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>/*</url-pattern>
</filter-mapping>
2)
JAVA代码:
public class EncodingFilter implements Filter {
 private String charset = null;
 public void destroy() {
 }
 public void doFilter(ServletRequest req, ServletResponse resp,
   FilterChain chain) throws IOException, ServletException {
  req.setCharacterEncoding(this.charset);
  chain.doFilter(req, resp);
 }
 //Filter获取web.xml中的初始参数;
 public void init(FilterConfig arg0) throws ServletException {
  this.charset = arg0.getInitParameter("charset");
 }

}
 
(2)<利用filter进行用户登录过滤>------------
1)
 <filter>
  <filter-name>userlogin</filter-name>
  <filter-class>
   org.lxh.myzngt.filter.UserLoginFilter
  </filter-class>
 </filter>
 <filter-mapping>
  <filter-name>userlogin</filter-name>
  <url-pattern>/jsp/user/*</url-pattern>
 </filter-mapping>
 <filter-mapping>    -->可以多个匹配!!!!
  <filter-name>userlogin</filter-name>
  <url-pattern>/jsp/ques/*</url-pattern>
 </filter-mapping>

2)
public class UserLoginFilter implements Filter {
 public void destroy() {
 }
 public void doFilter(ServletRequest arg0, ServletResponse arg1,
   FilterChain arg2) throws IOException, ServletException {
  HttpServletRequest req = (HttpServletRequest) arg0;
  if (req.getSession().getAttribute("userid") != null) {
   arg2.doFilter(arg0, arg1);
  } else {
   req.getRequestDispatcher("forward.htm").forward(arg0, arg1) ;
  }
 }
 public void init(FilterConfig arg0) throws ServletException {
 }
}
 
(3)
在用户访问目标页面之前,利用Filter进行进行权限查询:
1.用户是否已登录(即session中是否有相应的记录)
2.用户权限是否符合访问页面要求。
如下:
(1)在web.xml中添加:
 <filter>
  <filter-name>PrivilegeFilter</filter-name>
  <filter-class>com.demo.web.filter.PrivilegeFilter</filter-class>
  <init-param>
   <param-name>doNotFilterURL</param-name>
   <param-value>
    admin/rand, /login, admin/logout, /common/, /images/, /style/, /js/,
/fckeditor/, /userFilesAbsolutePath, /editPass
   </param-value>

  </init-param>
 </filter>
 <filter-mapping>
  <filter-name>PrivilegeFilter</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>
 
(2)
com.demo.web.filter.PrivilegeFilter定义:
public class PrivilegeFilter implements Filter {
 /** 不需要过滤的URL */
 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;
    }
   }
  }
   //对不属于不用过滤的,查询数据表,看用户是否有权访问。若没,则返回提示用户无限访问页面。若有,则直接通过。
}
 

本文出自 “Changes we need ! ” 博客,请务必保留此出处http://shenzhenchufa.blog.51cto.com/730213/269722

 

分享到:
评论

相关推荐

    struts2 拦截器

    Struts2的拦截器是基于Java的Servlet Filter机制实现的,但是更加强大和灵活。 2. **拦截器链**:在Struts2中,多个拦截器可以形成一个拦截器链,每个拦截器按照定义的顺序依次执行。如果所有拦截器都允许Action...

    使用struts2拦截器对登陆权限验证

    在本案例中,我们将深入探讨如何使用Struts2拦截器实现登录权限验证,同时结合Servlet Filter进一步加强安全性。 首先,让我们理解Struts2拦截器的工作原理。拦截器是基于AOP(面向切面编程)的概念设计的,它们...

    Spring+struts2

    7. **拦截器(Interceptor)**:Struts2 的拦截器可以实现登录检查、权限控制等功能。 8. **过滤器(Filter)**:可能包括字符编码过滤器、Spring Security 过滤器等,用于处理请求和响应。 在实际开发中,还需要...

    简单理解Struts2中拦截器与过滤器的区别及执行顺序

    Struts2 中拦截器与过滤器的区别及执行顺序 Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器...

    Struts 2 过滤器和拦截器的区别

    在Struts 2框架中,过滤器(Filter)和拦截器(Interceptor)都是用于处理请求的关键组件,但它们之间存在本质的区别。正确理解这些差异有助于开发者更高效地利用这两种工具来优化应用程序的性能和安全性。 #### 二、...

    struts2拦截器原理

    Struts2 拦截器是基于Java的Servlet Filter设计模式的一种实现,它提供了一种在Action执行前后插入额外逻辑的方式。拦截器是Struts2框架的核心组件之一,用于增强应用的功能,比如权限验证、日志记录、数据校验等。 ...

    Struts2编写的通用(拦截器,过滤器)Filter

    这个名为"Struts2编写的通用(拦截器,过滤器)Filter"的项目,主要目标是防止用户非法访问未授权的页面,确保只有登录用户才能访问特定的资源。 **拦截器(Interceptor)** 拦截器是Struts2框架的核心特性之一,它...

    JAVAEE +struts2

    2. **拦截器(Interceptor)**:拦截器是Struts2的核心特性,它允许开发者在Action执行前后插入自定义逻辑。在这个项目中,拦截器可能用于实现登录验证、权限检查等功能,确保只有合法用户才能访问特定资源。 3. **...

    自定义拦截器struts2源代码

    自定义拦截器可以扩展Struts2的功能,使我们的应用更加灵活和模块化。 首先,要创建一个自定义拦截器,我们需要定义一个新的Java类并实现`Interceptor`接口或继承`AbstractInterceptor`类。这个类需要覆盖`...

    shiro+struts2+mybatis+spring整合实例

    3. **配置Struts2**:设置Struts2的配置文件,定义Action和结果,同时配置Struts2的拦截器,集成Shiro Filter。 4. **整合MyBatis**:配置MyBatis的SqlSessionFactory,编写Mapper接口和XML配置文件,实现SQL的动态...

    Hibernate+Spring+Struts2+ExtJS开发CRUD功能

    **Struts2配置**:Struts2的配置主要集中在`struts.xml`中,定义Action、拦截器、结果类型等,确保框架能够根据配置处理请求。 #### CRUD功能开发流程 1. **实体类设计**:基于业务需求设计实体类,并使用...

    bootstrap+jdbc+struts2

    Struts2的核心组件包括Filter Dispatcher(核心控制器)、Action类(业务逻辑处理)、Result(视图渲染)和Interceptor(拦截器)。拦截器是Struts2的一大特色,允许开发者在Action执行前后插入自定义逻辑,例如日志...

    struts2拦截器

    - 在 Struts2 中,拦截器的工作方式类似于过滤器(Filter),但更面向业务逻辑。它们按照预定义的顺序组成一个拦截器栈,当请求到达Action时,会逐个执行这些拦截器。 2. **拦截器的配置** - 在 `struts.xml` ...

    struts2工作原理及拦截器和过滤器

    Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...

    hibernate3+struts2+spring2 内容管理系统

    7. **过滤器(Filter)**:如`struts2-convention-plugin.xml`,用于设置Struts2的拦截器,实现URL映射和权限控制。 8. **测试类**:JUnit或Mockito测试代码,用于验证功能正确性。 通过这个SSH内容管理系统,...

    模拟Struts2拦截器代码

    在Struts2中,拦截器扮演着至关重要的角色,它们是框架的核心组件,能够增强应用的功能并实现诸如日志记录、权限检查、事务管理等通用任务。本文将深入探讨如何模拟Struts2的拦截器,并通过一个实际的Filter类来阐述...

    java+struts2防盗链(filter不可过滤action).docx

    Java+Struts2 防盗链(Filter 不可过滤 Action) 防盗链是指防止在没有通过合理的登录界面,直接进入到系统中的机制...使用 Filter 和 Struts2 的拦截器,我们可以实现防盗链机制,避免用户直接访问系统中的某些页面。

    Spring+struts2+Mybatis 整合例子

    在Java Web开发中,"Spring+...在学习和实践中,你需要理解每个框架的核心概念,如Spring的IoC容器、Struts2的拦截器和Action、Mybatis的动态SQL,以及它们之间的交互机制。这将为你后续的Java Web开发打下坚实的基础。

    Struts2拦截器详解源码

    与Servlet规范中的Filter相比,虽然两者都用于处理请求,但拦截器在Struts2中具有独立的生命周期和更灵活的调用顺序管理。 4.1.1 拦截器的调用时机与流程 拦截器的调用主要由`...

Global site tag (gtag.js) - Google Analytics