`

java中的拦截器

阅读更多
使用拦截器判断用户是否登录与是否登录超时,struts2中

1.struts中的配置
		<interceptors>
			<!--  声明拦截器 --> 
			<interceptor name="logInterceptor" class="com.oa.util.LogInterceptor"></interceptor>
			<!--  配置新的拦截器栈  -->
			<interceptor-stack name="myStack">
				<interceptor-ref name="logInterceptor">
				</interceptor-ref>
				<!-- 引入defaultStack -->
				<!-- 全局的每个action都会拦截 -->  
			    <interceptor-ref name="defaultStack"></interceptor-ref>
			</interceptor-stack>
		</interceptors>
		<global-results>
			<result name="logout" type="redirect">/jsp/login.jsp</result>
		</global-results>
		<action name="*_*"  class="{1}Action" method="{2}">
			<!-- 使用拦截器 -->
			<interceptor-ref name="myStack"></interceptor-ref>
			<result name="success">/jsp/{1}/{1}_{2}.jsp</result>
		</action>


2.拦截器类:
import org.apache.struts2.ServletActionContext;

import com.oa.pojo.system.User;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.AbstractInterceptor;

public class LogInterceptor extends AbstractInterceptor{

	@Override
	public String intercept(ActionInvocation ai) throws Exception {
		// TODO Auto-generated method stub
		User user=(User) ServletActionContext.getRequest().getSession().getAttribute("login");
		if(user==null){
			ServletActionContext.getRequest().getSession().setAttribute("info", "用户已下线,请重新登录");
			return "logout";
		}else{
			return ai.invoke();
		}
	}
}


3.拦截器与过滤器比较:
1、拦截器是基于java的反射机制的,而过滤器是基于函数回调
2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器
3、拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用
4、拦截器可以访问action上下文、值栈里的对象,而过滤器不能
5、在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
执行顺序 :过滤前 - 拦截前 - Action处理 - 拦截后 - 过滤后。
个人认为过滤是一个横向的过程,首先把客户端提交的内容进行过滤(例如未登录用户不能访问内部页面的处理);
过滤通过后,拦截器将检查用户提交数据的验证,做一些前期的数据处理,接着把处理后的数据发给对应的Action;
Action处理完成返回后,拦截器还可以做其他过程,再向上返回到过滤器的后续操作。
分享到:
评论

相关推荐

    java 拦截器实现

    在Java拦截器中,每个拦截器可以视为链上的一个节点,当请求到来时,它会依次经过每个拦截器。如果拦截器决定处理请求,它可以直接返回结果,否则将请求传递给下一个拦截器。这种方式使得拦截器可以灵活地组合和解耦...

    java代理实现webservice接口拦截器功能

    本文根据java代理实现CXF拦截器异常时只能进入fault拦截器而不能继续向下执行的问题。 利用java代理让RMI具有拦截器的功能。

    Java Struts 实现拦截器

    ### Java Struts 实现拦截器的关键知识点 #### Struts2框架概述 Struts2是一个基于MVC(Model-View-Controller)设计模式的Java Web应用框架。它利用一系列的组件来处理用户请求并生成响应。其中,拦截器...

    java项目拦截器分析与认识

    拦截器是Java开发中的一种常见技术,尤其在Spring MVC框架中,它扮演着重要角色。拦截器是一种动态拦截方法调用的机制,基于AOP(面向切面编程)思想,能够实现在指定方法调用前后插入额外的逻辑,或者阻止方法的...

    java拦截器

    例如,你可能需要在拦截器中检查`User-Agent`头来确定用户是使用了Chrome、Firefox还是其他浏览器。这样,你可以对不同浏览器提供兼容性处理,如调整页面样式、禁用某些功能或发送特定的提示信息。 **四、Struts2...

    实现java自定义注解拦截器.docx

    - 可以在拦截器中增加对跨域的支持。 - **如何扩展拦截器的功能?** - 可以通过继承`HandlerInterceptor`并重写方法来实现。 - **如何避免注解被误用?** - 可以通过严格的代码审查流程或在注解中添加更多的约束...

    Java SpringBoot实现的过滤器(和拦截器)控制登录页面跳转

    这个压缩包可能包含了一个示例项目,展示了如何在SpringBoot中配置和使用过滤器或拦截器进行登录验证。你可能需要解压并导入到IDE中,按照提供的说明运行和测试,以便更好地理解和学习这个功能。 通过深入理解这些...

    Struts2 拦截器 和 Java 中的动态代理

    本文将深入探讨Struts2拦截器的原理以及它与Java中的动态代理之间的联系。 首先,让我们了解Struts2拦截器的基本工作原理。拦截器在Action执行前后被调用,形成一个拦截器链。每当一个HTTP请求到达,Struts2的...

    拦截器解决中文乱码问题

    2. **配置拦截器**:在Spring的配置文件(如`web.xml`或`spring-mvc.xml`)中,我们需要注册这个拦截器,将其添加到拦截器链中。 3. **设置请求编码**:在`preHandle`方法中,我们可以获取到HttpServletRequest对象...

    ip黑白名单拦截器java示例

    以下将详细讲解基于Java实现的IP黑白名单拦截器及其核心概念。 首先,我们来看标题提及的“ip黑白名单拦截器java示例”。IP拦截器的主要任务是检查请求的源IP地址,如果该地址存在于黑名单中,拦截器会阻止其访问;...

    java 拦截器例子

    Java拦截器(Interceptor)是Java应用开发中一种重要的设计模式,尤其在企业级应用和框架中,如Spring、Struts2、MyBatis等。它主要用于在方法执行前后添加额外的功能,比如日志记录、性能统计、事务管理、权限验证...

    java拦截器_类型转换_国际化

    1. **Java拦截器**: - AOP(面向切面编程)基础:Spring框架中的拦截器是基于AOP的概念,它允许开发者定义“切面”来封装横切关注点,如事务管理。 - 拦截器链:多个拦截器可以形成一个链,每个拦截器在目标方法...

    基于java的企业级应用开发:拦截器.ppt

    在Java企业级应用开发中,Spring MVC框架提供了一种名为拦截器(Interceptor)的功能,它与Servlet中的过滤器(Filter)类似,但有其独特的用法和功能。拦截器主要用于在用户请求到达控制器处理逻辑之前或之后进行...

    struts 拦截器,扩展,以及java annotation

    在Struts框架中,拦截器扮演着关键角色,它们提供了AOP(面向切面编程)的能力,使得开发者可以在不修改业务逻辑的情况下,对请求处理流程进行增强或监控。 1. **Struts拦截器**: - 拦截器是Struts2的核心组件之...

    java拦截器小实验(银行账户)

    在这个“java拦截器小实验(银行账户)”中,我们将探讨如何使用Java的动态代理机制来实现一个简单的银行账户操作拦截器。 首先,让我们理解什么是代理(Proxy)。代理模式是结构型设计模式,它提供了一种对目标...

    java代码-登陆拦截器LoginInterceptor源代码

    java代码-登陆拦截器LoginInterceptor源代码 ——学习参考资料:仅用于个人学习使用

    struts2拦截器应用小例子

    当请求到达控制器时,Struts2会依次调用这个栈中的拦截器,每个拦截器都有机会处理请求,然后决定是否将请求传递给下一个拦截器或直接返回响应。 创建一个简单的Struts2拦截器,你需要遵循以下步骤: 1. 创建拦截...

Global site tag (gtag.js) - Google Analytics