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<Exception> 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<Exception> 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的请求拦截器机制,提升我们的开发效率和代码质量。
标题中的“cas-client扩展拦截器支持excludes”指的是在CAS(Central Authentication Service)客户端的实现中,对拦截器功能进行了扩展,增加了排除特定路径的功能。这通常是为了在使用CAS进行统一认证时,允许某些...
初学者很容易将 Spring MVC 拦截器 和 Spring Cloud OpenFeign 拦截器搞混,误以为OpenFeign拦截器就是SpringMVC拦截器:Spring MVC拦截器发生在客户端 和 服务端之间,在客户端向服务端发送请求时进行拦截处理。...
拦截器是Struts2的核心特性之一,它在MVC设计模式中起到了承上启下的作用,增强了框架的功能和灵活性。在Struts2中,拦截器可以理解为一种AOP(面向切面编程)的概念,它们在动作执行前后进行额外的操作,比如日志...
3. **应用拦截器**:最后,你需要在Action配置中引用刚刚定义的拦截器栈,这样当请求到达这些Action时,拦截器就会生效。 ```xml *" class="com.example.AdminAction"> <result name="success">/admin/home.jsp ...
Struts 2 框架中的拦截器是其核心组件之一,主要负责在Action执行前后进行额外的操作,如参数绑定、验证、权限控制等。在`struts-default`配置中,许多默认的拦截器组合成预设的拦截器栈,为开发者提供了便捷的功能...
总结来说,Struts2的拦截器机制是其强大之处,它使得开发者能够更方便地扩展框架功能,提升应用的质量和效率。通过深入学习和实践,我们可以充分利用拦截器来构建更健壮、可维护的Java Web应用。
在Java Web开发中,Servlet、拦截...通过合理地组合和配置Servlet、过滤器和拦截器,我们可以构建出功能强大且灵活的Java Web应用。在学习和实践中,不仅要理解它们的概念,还需要掌握如何根据实际需求进行设计和优化。
Struts2是一个强大的Java web框架,它...文件名`strutsdemo`可能是一个简单的Struts2演示项目,其中包含了自定义拦截器的实现和应用。通过查看和运行这些代码,开发者可以直观地学习如何在实际项目中应用自定义拦截器。
Spring MVC--自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器Spring MVC--13.自定义拦截器
本实验报告将探讨如何利用 SpringMVC 的拦截器(Interceptor)来实现用户登录权限验证,确保只有已登录的用户才能访问特定的受保护资源。 首先,我们来看一下实验的基本步骤: 1. 创建 `User` 类:这是表示用户...
Flex-Spring 拦截器是 Spring 框架与 Adobe Flex 之间的集成关键部分,它允许在服务调用之间添加拦截逻辑,从而实现如事务管理、权限验证、日志记录等功能。这篇博客(https://rogerhunt.iteye.com/blog/608778)...
Struts2是一个强大的MVC框架,它允许开发者通过拦截器来增强应用的功能,比如日志记录、事务管理、权限验证等。本实例主要关注的是“权限验证拦截器”,这是一个用于确保用户具有访问特定资源所需权限的关键组件。 ...
**在EJB(Enterprise JavaBeans)中加入拦截器** EJB是Java EE平台中的...例如,`基于EJB分布式业务应用组件规范说明.doc`可能提供了关于EJB在分布式环境下的拦截器应用指导,帮助开发者更好地理解和应用EJB拦截器。
在现代软件开发过程中,特别是Web应用程序中,为了实现灵活高效的业务逻辑处理及控制流管理,常常会使用到两种设计模式:拦截器(Interceptor)与过滤器(Filter)。这两种技术虽然在功能上有一定的相似之处,但其...
Vue添加请求拦截器及vue-resource拦截器使用 Vue.js是一个流行的前端框架,提供了大量的功能来帮助开发者快速构建应用程序。在实际开发中,我们经常需要处理HTTP请求的拦截和错误处理。拦截器(Interceptors)是一...
6. **CreateSessionInterceptor** - 创建会话拦截器:在需要时自动创建Servlet Session。 7. **DebuggingInterceptor** - 调试拦截器:提供详细的请求和Action信息,便于开发和调试。 8. **...
关于对用户的拦截验证。 <package name="front" extends="struts-default" > <!-- 部署自定义拦截器!...-- 应用自定义拦截器栈 --> <interceptor-ref name="myStack" /> </struts>
拦截器是按照链式顺序执行的,如果存在多个拦截器,每个拦截器的preHandle()方法按注册顺序依次调用,只有当所有拦截器的preHandle()都返回true时,请求才会继续传递到处理器。postHandle()和afterCompletion()则在...