`
陆地小神仙
  • 浏览: 9161 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JFast应用系列之(6) -- 拦截器概述

 
阅读更多

  JFast的拦截器,和其他框架的拦截器类似,容易上手

  

@Aop(scope = AopScope.Method,order = 0)
public class UserInterceptor implements AopHandler{

	public void beforeHandle(ApiInvocation invoke, HttpServletRequest request,HttpServletResponse response, List<Exception> ex) throws Exception {
		invoke.invoke();
	}

	@Override
	public void afterHandle(ApiInvocation invoke, HttpServletRequest request,
	HttpServletResponse response, List<Exception> ex) throws Exception {
		invoke.invoke();
	}

}

    @Aop注解标志该类为拦截器,所有的拦截器必须实现AopHandler接口,复写里面的方法。

    @Aop注解参数说明:

  •     scope:拦截器范围说明(AopScope.Method代表方法级拦截器,AopScope.Global为全局拦截器),方法  级拦截器只有在控制器中指明调用才可以执行,全局拦截器会拦截所有访问服务的请求。
  •  order:控制全局拦截器执行的顺序,数字越小的先执行。
  •  handler:在控制器中使用该参数指定控制器需要经过的方法级拦截器链。

ApiInvoktion对象介绍:

  •    invoke()方法 : 和Struts相同,拦截器方法中必须显性调用它,执行链才会继续。
  •    getParameter(‘’) 方法: 获取请求参数,该方法可以获得所有请求参数,但是用request直接获取参数,    很多时候并不是很顺利,建议使用这个。
  •    invoke.assignApiParam("参数名",参数值):向控制器中注入参数
  •  invoke.renderException(视图对象):拦截器中可以调用这个方法终止执行链,并返回视图给客户端
  •  invoke.getBean():获取目标控制器类
  •  invoke.getMethod():获取控制器执行的方法

List<Exception> ex:包含了拦截器该方法执行之前所有的异常信息,方便对异常进行统一处理

 

下面上代码看看拦截器用法:

 

1.全局拦截器之 -- 异常处理

 

@Aop(scope = AopScope.Global, order = Integer.MAX_VALUE , description = "统一异常处理")
public class ErrorInterceptor implements AopHandler {
	
	/**
	 * 只处理业务逻辑异常,如果框架有BUG统一为内部异常
	 */
	public void beforeHandle(ApiInvocation invoke, HttpServletRequest request,HttpServletResponse response, List<Exception> ex) throws Exception {
                Map<String,String> errInfo = new HashMap<String,String>();
		if (!ex.isEmpty()) {
			Exception e = ex.get(0);  //根据约定,只返回第一条异常信息
			errInfo.put("errCode",1001);
            errInfo.put("errMsg",e.getMessage());
            invoke.renderException(new Json(errInfo));
		} else {
			invoke.invoke();
		}
	}
	
	/**
	 * 后置拦截器返回异常信息
	 */
	public void afterHandle(ApiInvocation invoke, HttpServletRequest request,
			HttpServletResponse response, List<Exception> ex) throws Exception {
		beforeHandle(invoke,request,response,ex);
	}

}

    全局拦截器只要写好上面的类即可,不需要做额外配置。

 

 2.方法拦截器之 -- 用户注入

   

   编写拦截器:

 

@Aop(scope = AopScope.Method,order = 0,description = "获取用户信息并注入到控制器中")
public class UserInterceptor implements AopHandler{
	
	@Resource
	private UserDao userDao;
	
	public void beforeHandle(ApiInvocation invoke, HttpServletRequest request,HttpServletResponse response, List&lt;Exception&gt; ex) throws Exception {
		User user = userDao.getUser(Integer.parseInt(invoke.getParameter("userId")));
		invoke.assignApiParam("user", user);
		invoke.invoke();
	}

	@Override
	public void afterHandle(ApiInvocation invoke, HttpServletRequest request,
	HttpServletResponse response, List&lt;Exception&gt; ex) throws Exception {
		invoke.invoke();
	}

}

    

    调用拦截器:

    

@Api(path = "api/v1", description = "用户信息控制器")
public class UserController {

	@Aop(handler={UserInterceptor.class})
	@Head(path="users/:userId")
	public Json showUser(User user) {
		return new Json("{success:true}");
	}
	
}

    控制器方法上面增加了@Aop注解,并且声明该方法需要经过UserInterceptor拦截器。

    这里的请求路径中有一个动态参数:

    path = "users/:userId" :如果请求为http://localhost:8080/demo/api/v1/users/1

    那么请求参数中就会有 userId = 1这一条;

    首先在拦截其中截获该参数,查询用户信息,然后把用户信息注入到控制器参数的user对象中了。

分享到:
评论

相关推荐

    uni-app 请求拦截器

    【uni-app请求拦截器】是基于uni-app框架实现的一种机制,它允许开发者在发送网络请求前和接收到响应后...分析和学习这些代码将有助于我们更好地理解和应用uni-app的请求拦截器机制,提升我们的开发效率和代码质量。

    cas-client扩展拦截器支持excludes

    标题中的“cas-client扩展拦截器支持excludes”指的是在CAS(Central Authentication Service)客户端的实现中,对拦截器功能进行了扩展,增加了排除特定路径的功能。这通常是为了在使用CAS进行统一认证时,允许某些...

    Spring Cloud OpenFeign - - - >拦截器

    初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:Spring MVC拦截器发生在客户端 和 服务端之间,在客户端向服务端发送请求时进行拦截处理。...

    struts2学习之九---拦截器

    拦截器是Struts2的核心特性之一,它在MVC设计模式中起到了承上启下的作用,增强了框架的功能和灵活性。在Struts2中,拦截器可以理解为一种AOP(面向切面编程)的概念,它们在动作执行前后进行额外的操作,比如日志...

    structs2拦截器实例2-权限验证拦截器

    3. **应用拦截器**:最后,你需要在Action配置中引用刚刚定义的拦截器栈,这样当请求到达这些Action时,拦截器就会生效。 ```xml *" class="com.example.AdminAction"&gt; &lt;result name="success"&gt;/admin/home.jsp ...

    struts-default中拦截器介绍.pdf

    Struts 2 框架中的拦截器是其核心组件之一,主要负责在Action执行前后进行额外的操作,如参数绑定、验证、权限控制等。在`struts-default`配置中,许多默认的拦截器组合成预设的拦截器栈,为开发者提供了便捷的功能...

    struts2--4.拦截器

    总结来说,Struts2的拦截器机制是其强大之处,它使得开发者能够更方便地扩展框架功能,提升应用的质量和效率。通过深入学习和实践,我们可以充分利用拦截器来构建更健壮、可维护的Java Web应用。

    java-web -- servlet 拦截器 过滤器使用

    在Java Web开发中,Servlet、拦截...通过合理地组合和配置Servlet、过滤器和拦截器,我们可以构建出功能强大且灵活的Java Web应用。在学习和实践中,不仅要理解它们的概念,还需要掌握如何根据实际需求进行设计和优化。

    Struts2--自定义拦截器

    Struts2是一个强大的Java web框架,它...文件名`strutsdemo`可能是一个简单的Struts2演示项目,其中包含了自定义拦截器的实现和应用。通过查看和运行这些代码,开发者可以直观地学习如何在实际项目中应用自定义拦截器。

    Spring MVC--13.自定义拦截器

    Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器

    企业级开发-SpringMVC使用拦截器实现用户登录权限验证实验报告.docx

    本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...

    Flex-Spring拦截器

    Flex-Spring 拦截器是 Spring 框架与 Adobe Flex 之间的集成关键部分,它允许在服务调用之间添加拦截逻辑,从而实现如事务管理、权限验证、日志记录等功能。这篇博客(https://rogerhunt.iteye.com/blog/608778)...

    structs2..拦截器实例2-权限验证拦截器

    Struts2是一个强大的MVC框架,它允许开发者通过拦截器来增强应用的功能,比如日志记录、事务管理、权限验证等。本实例主要关注的是“权限验证拦截器”,这是一个用于确保用户具有访问特定资源所需权限的关键组件。 ...

    在Ejb中加入拦截器

    **在EJB(Enterprise JavaBeans)中加入拦截器** EJB是Java EE平台中的...例如,`基于EJB分布式业务应用组件规范说明.doc`可能提供了关于EJB在分布式环境下的拦截器应用指导,帮助开发者更好地理解和应用EJB拦截器。

    拦截器和过滤器的区别

    在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...

    Vue添加请求拦截器及vue-resource 拦截器使用

    Vue添加请求拦截器及vue-resource拦截器使用 Vue.js是一个流行的前端框架,提供了大量的功能来帮助开发者快速构建应用程序。在实际开发中,我们经常需要处理HTTP请求的拦截和错误处理。拦截器(Interceptors)是一...

    spring11mvc-机制(拦截器、aop、异常).docx

    。。spring11mvc-机制(拦截器、aop、异常).docx

    Struts2默认拦截器解析[归类].pdf

    6. **CreateSessionInterceptor** - 创建会话拦截器:在需要时自动创建Servlet Session。 7. **DebuggingInterceptor** - 调试拦截器:提供详细的请求和Action信息,便于开发和调试。 8. **...

    拦截器的验证

    关于对用户的拦截验证。 &lt;package name="front" extends="struts-default" &gt; &lt;!-- 部署自定义拦截器!...-- 应用自定义拦截器栈 --&gt; &lt;interceptor-ref name="myStack" /&gt; &lt;/struts&gt;

Global site tag (gtag.js) - Google Analytics