`
cleverbing
  • 浏览: 15560 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

struts2过滤器和拦截器

阅读更多
过滤器
也就是写一个自己的类,让这个类实现于Filter这个接口,这个接口里有三个方法
init()
doFilter()
destroy()
主要是对doFilter()进行操作,你可以在这个方法里写你想进行的操作.
写完这些之后,就是在web.xml里的配置了
<filter>
  <filter-name>myFilter</filter-name>
  <filter-class>包名+实现Filter接口的类</filter-class>
</filter>
<filter-mapping>
  <filter-name>myFilter</filter-name>
  <url-pattern>/*</url-pattern>
</filter-mapping>

在<url-pattern>里面设置了/*之后,也就是说在进行每一个操作时都会自动去执行自定义的filter里的doFilter方法里的代码.这样就可以进行相应的过滤操作了

======================================================================
拦截器
STEP01 在Struts2的配置文件中,定义2个package:

1个package是包括前台所有的Action

另一个package包括后台管理员的所有的Action。

STEP02:然后定义一个AuthInterceptor,简单的这样写:


Java代码 
1.public String intercept(ActionInvocation invocation) throws Exception {  
2. 
3.    Map<String, Object> map = invocation.getInvocationContext()  
4.            .getSession();  
5.    User user = (User) map.get("user");  
6. 
7.    if (user == null) {  
8.        return "login";  
9.    } else {  
10.        return invocation.invoke();  
11.    }  
12.} 
public String intercept(ActionInvocation invocation) throws Exception {

Map<String, Object> map = invocation.getInvocationContext()
.getSession();
User user = (User) map.get("user");

if (user == null) {
return "login";
} else {
return invocation.invoke();
}
}

STEP03:将AuthInterceptor加入到管理员的那个package的默认InterceptorStack中。


Xml代码 
1.<interceptors> 
2.    <interceptor name="authInterceptor" 
3.                class="XXXX.AuthInterceptor" /> 
4.    <interceptor-stack name="privateStack"> 
5.              
6.    <interceptor-ref name="defaultStack"/> 
7.    <interceptor-ref name="authInterceptor"/> 
8.    </interceptor-stack> 
9.</interceptors> 
10. 
11.<default-interceptor-ref name="privateStack"/> 
12.<action> 
13.     ............  
14.</action> 







-----------------------------------------------------------------
拦截器二
1 实现权限控制拦截器
本示例应用要求用户登陆,且必须为指定用户名才可以查看系统中某个视图资源;否则,系统直接转入登陆页面。对于上面的需求,可以在每个Action的执行实际处理逻辑之前,先执行权限检查逻辑,但这种做法不利于代码复用。因为大部分Action里的权限检查代码都大同小异,故将这些权限检查的逻辑放在拦截器中进行将会更加优雅。

检查用户是否登陆,通常都是通过跟踪用户的Session来完成的,通过ActionContext即可访问到Session中的属性,拦截器的intercepte(ActionInvocation invocation)方法的invocation参数可以很轻易地访问到请求相关的ActionContext实例。
权限检查拦截器类的代码如下:
//权限检查拦截器继承AbstractInterceptor类
public class AuthorityInterceptor extends AbstractInterceptor
{
//拦截Action处理的拦截方法
public String intercept(ActionInvocation invocation) throws Exception
{
//取得请求相关的ActionContext实例
ActionContext ctx = invocation.getInvocationContext();
Map session = ctx.getSession();
//取出名为user的Session属性
String user = (String)session.get("user");
//如果没有登陆,或者登陆所用的用户名不是scott,都返回重新登陆
if (user != null && user.equals("scott") )
{
return invocation.invoke();
}
//没有登陆,将服务器提示设置成一个HttpServletRequest属性
ctx.put("tip" , "您还没有登陆,请输入scott,tiger登陆系统");
//直接返回login的逻辑视图
return Action.LOGIN;
}
}
上面拦截器代码非常简单,先通过ActionInvocation参数取得用户的Session实例的引用,然后从中取出user属性,通过判断该属性值来确定用户是否登陆系统,从而判断是否需要转入登陆页面。

2 配置权限控制拦截器
一旦实现了上面的权限检查拦截器,就可以在所有需要实现权限控制的Action中复用上面的拦截器。
为了使用该拦截器,首先在struts.xml文件中定义该拦截器,定义拦截器的配置片段如下:
<!-- 用户拦截器定义在该元素下 -->
<interceptors>
<!-- 定义了一个名为authority的拦截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
</interceptors>
定义了该拦截器之后,可以在Action中应用该拦截器,应用该拦截器的配置片段如下:
<!-- 定义一个名为viewBook的Action,其实现类为ActionSupport -->
<action name="viewBook">
<!-- 返回success视图名时,转入/WEB-INF/jsp/viewBook.jsp页面 -->
<result>/WEB-INF/jsp/viewBook.jsp</result>
<!-- 拦截器一般配置在result元素之后! -->
<interceptor-ref name="defaultStack"/>
<!-- 应用自定义拦截器 -->
<interceptor-ref name="authority"/>
</action>

上面名为viewBook的Action,没有指定class属性,默认使用ActionSupport类,配置该Action时,只是指定了一个Result,指定返回success字符串时,系统将转入/WEB-INF/jsp/viewBook.jsp页面。但并为未配置login视图对应的JSP页面。
考虑到这个拦截器的重复使用,可能在多个Action都需要跳转到login逻辑试图,故将login Result定义成一个全局Result。下面是配置login Result的配置片段:
<!-- 定义全局Result -->
<global-results>
<!-- 当返回login视图名时,转入/login.jsp页面 -->
<result name="login">/login.jsp</result>
</global-results>

经过上面的配置,如果浏览者在浏览器中直接发送viewBook请求,将会转入如图所示的页面。
这种通过拦截器进行权限控制的方式,显然具有更好的代码复用。
如果为了简化struts.xml文件的配置,避免在每个Action中重复配置该拦截器,可以将该拦截器配置成一个默认拦截器栈(这个默认拦截器栈应该包括default-stack拦截器栈和权限检查拦截器)。
定义自己的默认拦截器栈的配置片段如下:
<interceptors>
<!-- 定义权限检查拦截器 -->
<interceptor name="authority" class="lee.AuthorityInterceptor"/>
<!-- 定义一个包含权限检查的拦截器栈 -->
<interceptor-stack name="mydefault">
<!-- 定义拦截器栈包含default-stack拦截器栈 -->
<interceptor-ref name="default-stack"/>
<!-- 定义拦截器栈包含authority拦截器 -->
<interceptor-ref name=" authority"/>
</interceptor- stack >
</interceptors>

一旦定义了上面的mydefault拦截器栈,这个拦截器栈包含了权限检查拦截器和系统默认的拦截器栈。如果将这个拦截器栈定义成默认拦截器,则可以避免在每个Action需要重复定义权限检查拦截器。
下面是定义默认拦截器的配置片段:
<default-interceptor-ref name="mydefault"/>
一旦在某个包下定义了上面的默认拦截器栈,在该包下的所有Action都会自动增加权限检查功能。对于那些不需要使用权限控制的Action,将它们定义在另外的包中——这个包中依然使用系统原来的默认拦截器栈,将不会有权限控制功能。



本文系转帖
分享到:
评论

相关推荐

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

    通过对Struts 2框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...

    struts2过滤器和拦截器的区别分析

    在Struts2框架中,过滤器(Filter)和拦截器(Interceptor)是两种不同的机制,它们在处理请求和响应的过程中扮演着不同的角色。以下是它们的本质区别和使用区别。 **一、本质区别** 1. **实现机制**: - 拦截器...

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

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

    Struts2拦截器实现权限控制demo

    在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...

    struts过滤器(拦截器)程序.zip

    在`struts过滤器(拦截器)程序.zip`中,我们可以看到这些概念如何在实际项目中得到运用,包括`web.xml`的配置、`struts.xml`的拦截器定义以及相关的Java源码和JSP页面,它们共同构成了一个完整的Struts2应用实例。

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

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

    struts2 拦截器

    总之,Struts2的拦截器机制极大地增强了框架的功能性和灵活性,使得开发者可以轻松地添加自定义逻辑,提高代码的可维护性和可扩展性。在实际项目中,合理利用拦截器可以解决许多常见的问题,提高Web应用程序的质量。

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

    总结来说,这个项目提供了Struts2中拦截器和过滤器的实际应用示例,特别关注了用户身份验证和非法访问控制。通过深入研究和实践这个示例,开发者可以更深入地理解这两个组件,并能够将这些知识应用于自己的项目中,...

    Struts2 拦截器

    在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...

    Struts 2 过滤器的总结

    Struts 2中的过滤器是实现请求处理、响应优化和安全控制的关键技术。通过灵活配置和合理设计,过滤器能显著提升Web应用程序的功能性和安全性。掌握过滤器的原理与应用,对于开发高效、安全的Web应用至关重要。

    Struts2 拦截器过滤方法(二十八)

    在"Struts2 拦截器过滤方法(二十八)"的博文中,可能更具体地讲解了一些高级用法,如条件判断拦截、组合拦截器、拦截器的堆栈管理和自定义参数传递等。 对于项目中的源码部分(src目录),可能包含了自定义拦截器...

    struts03:拦截器、过滤器与拦截器的区别、文件上传

    综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。

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

    结合使用Struts2拦截器和Servlet Filter,我们可以构建出强大的权限验证机制。拦截器适用于Action级别的控制,而Filter则可以全局拦截所有请求,两者相辅相成,确保只有已登录用户才能访问受保护的资源。 在提供的`...

    struts2通过过滤器拦截其漏洞配置方法

    通过web配置拦截器进行struts2漏洞拦截源码及配置

    Struts2拦截器的实现原理(csdn)————程序.pdf

    在Struts2中,拦截器工作在Action和结果(Result)之间,形成一个拦截器栈,每个拦截器按照配置的顺序依次执行。 Struts2的拦截器执行流程如下: 1. **初始化拦截器栈**:当Struts2框架启动时,会根据配置文件...

    Struts权限过滤器

    在`web.xml`中添加自定义过滤器的配置,确保它在Struts过滤器之前执行,以便先进行权限检查: ```xml &lt;filter-name&gt;customAuthenticationFilter &lt;filter-class&gt;...

    struts2拦截器原理

    总的来说,Struts2的拦截器机制极大地增强了框架的灵活性和可扩展性,使得开发者可以在不修改Action代码的情况下,实现对业务流程的扩展和控制。通过合理的拦截器配置和自定义拦截器实现,可以构建出高效且易于维护...

    Struts2 配置登陆拦截器

    在Struts2中,拦截器是实现业务逻辑控制和处理流程的重要组件,它们可以添加额外的功能,如日志记录、权限检查、事务管理等,而不干扰实际的业务操作。本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的...

    struts2实例 自定义过滤器 文件上传下载 登录功能

    本实例展示了如何在Struts2环境中实现几个关键功能:自定义过滤器、文件上传下载以及用户登录功能。这些功能是任何Web应用程序的基础组成部分,理解和掌握它们对于提升Web开发技能至关重要。 首先,我们来探讨...

    浅谈Struts2拦截器的原理与实现.docx

    Struts2还提供了一些抽象类如`AbstractInterceptor`和`MethodFilterInterceptor`,简化了拦截器的实现过程,例如`MethodFilterInterceptor`允许开发者指定要过滤的Action方法。 4. **定义拦截器示例** 下面是一个...

Global site tag (gtag.js) - Google Analytics