过滤器
也就是写一个自己的类,让这个类实现于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框架中过滤器和拦截器的核心区别以及具体应用场景的分析,我们可以看到,虽然两者都能实现类似的功能(如权限验证),但它们的工作方式和技术基础存在明显差异。选择合适的技术方案取决于实际项目的...
在Struts2框架中,过滤器(Filter)和拦截器(Interceptor)是两种不同的机制,它们在处理请求和响应的过程中扮演着不同的角色。以下是它们的本质区别和使用区别。 **一、本质区别** 1. **实现机制**: - 拦截器...
Struts2 工作原理及拦截器和过滤器 Struts2 框架的工作原理可以分为以下几个步骤: 1. 客户端发出一个指向 Servlet 容器的请求(Tomcat); 2. 这个请求会经过几个过滤器,最后会到达 FilterDispatcher 过滤器。...
在Struts2中,拦截器是实现业务逻辑控制和增强功能的重要机制,它们扮演着类似于AOP(面向切面编程)的角色,允许在动作执行前后插入自定义逻辑。在这个“Struts2拦截器实现权限控制demo”中,我们将深入探讨如何...
在`struts过滤器(拦截器)程序.zip`中,我们可以看到这些概念如何在实际项目中得到运用,包括`web.xml`的配置、`struts.xml`的拦截器定义以及相关的Java源码和JSP页面,它们共同构成了一个完整的Struts2应用实例。
Struts2 中的拦截器(Interceptor)和过滤器(Filter)是两个不同的概念,虽然它们都可以影响请求的处理过程,但它们的作用域、执行顺序和实现机制都有所不同。 拦截器(Interceptor) 拦截器是 Struts2 框架中的...
总之,Struts2的拦截器机制极大地增强了框架的功能性和灵活性,使得开发者可以轻松地添加自定义逻辑,提高代码的可维护性和可扩展性。在实际项目中,合理利用拦截器可以解决许多常见的问题,提高Web应用程序的质量。
总结来说,这个项目提供了Struts2中拦截器和过滤器的实际应用示例,特别关注了用户身份验证和非法访问控制。通过深入研究和实践这个示例,开发者可以更深入地理解这两个组件,并能够将这些知识应用于自己的项目中,...
在Struts2中,拦截器就像过滤器一样工作,通过链式调用在动作执行前后进行预处理和后处理。 首先,我们来理解一下拦截器的基本概念。拦截器是在Action调用之前和之后执行的一段代码,可以用来做日志记录、权限检查...
Struts 2中的过滤器是实现请求处理、响应优化和安全控制的关键技术。通过灵活配置和合理设计,过滤器能显著提升Web应用程序的功能性和安全性。掌握过滤器的原理与应用,对于开发高效、安全的Web应用至关重要。
在"Struts2 拦截器过滤方法(二十八)"的博文中,可能更具体地讲解了一些高级用法,如条件判断拦截、组合拦截器、拦截器的堆栈管理和自定义参数传递等。 对于项目中的源码部分(src目录),可能包含了自定义拦截器...
综上所述,拦截器和过滤器在Web开发中各自扮演着重要角色,而文件上传作为常见的业务需求,可以通过Struts2框架中的拦截器机制进行高效且安全的实现。理解它们的工作原理和区别,有助于提高开发效率和代码质量。
结合使用Struts2拦截器和Servlet Filter,我们可以构建出强大的权限验证机制。拦截器适用于Action级别的控制,而Filter则可以全局拦截所有请求,两者相辅相成,确保只有已登录用户才能访问受保护的资源。 在提供的`...
通过web配置拦截器进行struts2漏洞拦截源码及配置
在Struts2中,拦截器工作在Action和结果(Result)之间,形成一个拦截器栈,每个拦截器按照配置的顺序依次执行。 Struts2的拦截器执行流程如下: 1. **初始化拦截器栈**:当Struts2框架启动时,会根据配置文件...
在`web.xml`中添加自定义过滤器的配置,确保它在Struts过滤器之前执行,以便先进行权限检查: ```xml <filter-name>customAuthenticationFilter <filter-class>...
总的来说,Struts2的拦截器机制极大地增强了框架的灵活性和可扩展性,使得开发者可以在不修改Action代码的情况下,实现对业务流程的扩展和控制。通过合理的拦截器配置和自定义拦截器实现,可以构建出高效且易于维护...
在Struts2中,拦截器是实现业务逻辑控制和处理流程的重要组件,它们可以添加额外的功能,如日志记录、权限检查、事务管理等,而不干扰实际的业务操作。本篇文章将详细介绍如何配置Struts2的登录拦截器,以及其背后的...
本实例展示了如何在Struts2环境中实现几个关键功能:自定义过滤器、文件上传下载以及用户登录功能。这些功能是任何Web应用程序的基础组成部分,理解和掌握它们对于提升Web开发技能至关重要。 首先,我们来探讨...
Struts2还提供了一些抽象类如`AbstractInterceptor`和`MethodFilterInterceptor`,简化了拦截器的实现过程,例如`MethodFilterInterceptor`允许开发者指定要过滤的Action方法。 4. **定义拦截器示例** 下面是一个...