问题需求: 在执行系统中的某些方法后(如执行类名包含有Controller关键字的类中的方法后,再去执行打印某短信息的方法)。
解决办法<->:
一、在Spring的配置文件中配置名为BeanNameAutoProxyCreator的interceptor
<bean id="accessAdvisor" class="com.wsheng.uiservices.advisors.RestAPIAccessAdvisor" />
<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator"> <property name="beanNames"> <list> <value>*RestAPI</value> <value>*Controller</value> </list> </property> <property name="interceptorNames"> <list> <value>accessAdvisor</value> </list> </property> </bean>
二、创建类RestAPIAccessAdvisor并实现接口:AfterReturningAdvice
这样当调用完*Controller.java或者是*RestAPI.java这样的类中的方法后,将会执行其中的afterRutrning()方法,
public void afterReturning(Object returnValue, Method method, Object[] params, Object target) throws Throwable { try { String methodName = method.getName(); // 在这里执行相应的逻辑 System.out.println(methodName); } catch (Exception e) { logger.error("Building Rest API Access Metrics Failure!!!", e); } }
解决办法<二>
一、同样在spring的配置文件中启动Spring的MVC配置。
<mvc:annotation-driven> <context:component-scan base-package="com.chuanliu.platform.activity"/>
二、配置相关的Interceptor类并制定interceptor的url
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/rest/relation/contacts/add/*"/> <bean class="com.chuanliu.platform.activity.basic.advisor.ActionAdvisor"/> </mvc:interceptor> </mvc:interceptors>
三、完成ActionAdvisor类
/** * */ package com.chuanliu.platform.activity.basic.advisor; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.stereotype.Component; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; /** * @author Josh Wang(Sheng) * * @email josh_wang23@hotmail.com */ @Component("actionAdvisor") public class ActionAdvisor extends HandlerInterceptorAdapter { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { // TODO Auto-generated method stub System.out.println(" ---- afterCompletion"); super.afterCompletion(request, response, handler, ex); } @Override public void afterConcurrentHandlingStarted(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub System.out.println(" --- afterCOncurrentHandlingStarted"); super.afterConcurrentHandlingStarted(request, response, handler); } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { // TODO Auto-generated method stub System.out.println(" --- postHandle"); System.out.println("=== " + request.getRequestURL()); System.out.println(" === " + response.getStatus()); super.postHandle(request, response, handler, modelAndView); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // TODO Auto-generated method stub System.out.println(" --- preHandle"); System.out.println("--- " + request.getRequestURL()); return super.preHandle(request, response, handler); } }
执行测试会发现前拦截器中复写的方法都被执行了。
相关推荐
1. **配置顺序**:Spring MVC按照注册拦截器的顺序执行它们,如果`<mvc:annotation-driven />`配置在拦截器之后,那么可能会导致拦截器无法正常工作,因为Spring可能已经处理了请求,而没有交给拦截器。 2. **命名...
本节将详细介绍如何使用Spring AOP实现流程日志跟踪,主要关注于如何通过AOP拦截特定的类和方法来进行日志记录。 ##### 3.1 配置Spring AOP 在Spring配置文件中定义切面和切入点表达式是非常关键的一步。一般来说...
SpringBoot结合AspectJ实现SpringAOP拦截指定方法的知识点涵盖了多个方面,这包括Spring AOP的基本概念、SpringBoot的应用、切点(Pointcut)与通知(Advice)的定义、自定义注解以及AspectJ的使用。以下是这些知识...
当我们在Flex-Spring集成中使用拦截器时,我们需要配置Spring的`HandlerInterceptor`或`WebBindingInitializer`接口,这些拦截器会在请求被处理前或处理后执行特定的代码。例如,我们可以通过以下步骤设置拦截器: ...
在Spring AOP中,我们可以定义一个`@Aspect`类,这个类包含若干个`@Before`,`@After`,`@Around`等注解的方法,这些方法会在相应的切点(pointcut)执行前、后或周围执行。在数据脱敏的场景下,我们可能需要在响应...
在本文中,我们将深入探讨如何实现Struts2与Spring的集成,以及利用拦截器来增强应用的功能。 首先,Struts2 是一个基于MVC设计模式的开源Web框架,它提供了强大的控制器层,使得开发者可以更方便地处理HTTP请求和...
MyBatis拦截器是一种插件机制,允许我们在SQL执行前或执行后添加自定义行为。通过实现Interceptor接口并覆写intercept方法,我们可以拦截特定的SqlSession方法,如execute、insert、update、select等。在分页场景中...
它会遍历指定包及其子包下的所有类,寻找带有特定注解(如@Service、@Component、@Repository、@Controller等)的类,并将这些类实例化为Spring容器中的bean。通过这种方式,我们可以避免手动编写大量的XML配置,...
本篇文章将深入探讨如何使用Spring Boot、JPA连接数据库以及设置登录拦截器来拦截指定路径。 首先,我们需要理解Spring Boot中的JPA(Java Persistence API)是如何连接到数据库的。JPA是Java EE的一部分,提供了一...
本篇文章将详细探讨如何在Spring Boot中添加和使用拦截器来实现登录拦截。 首先,我们需要了解Spring Boot中的拦截器是如何工作的。在Spring MVC框架中,拦截器是基于AOP(面向切面编程)的概念实现的。我们可以...
"Spring Boot 容器加载完成后执行特定操作" Spring Boot 框架提供了多种方式来执行容器加载完成后的特定操作,例如使用 ApplicationListener 接口或使用 @PostConstruct 注解。在本文中,我们将介绍使用 ...
它涵盖了从JPA的基本使用到AOP拦截器的实现,再到分库分表策略的设计,对于提升大型项目的数据库性能有着重要的参考价值。开发者可以根据自身的业务场景,调整和优化这个示例,以满足特定的需求。
在Spring框架中,拦截器(Interceptor)是一种强大的...在实际开发中,可以利用Spring的拦截器实现诸如权限控制、日志记录等功能,而高级参数绑定和灵活的Controller返回值处理则极大地提高了开发效率和代码的可读性。
在`intercept`方法中,我们实现了类似Spring拦截器的功能,调用`preHandle`和`postHandle`方法,并根据`preHandle`的结果决定是否执行目标方法。 最后,`afterCompletion`方法的调用通常需要手动管理,因为它涉及到...
在本次的“spring MVC(新增拦截器demo)”项目中,我们将重点探讨如何在Spring MVC中添加拦截器来实现对请求的预处理和后处理。 拦截器在Spring MVC中扮演着关键的角色,它们可以用来执行一些全局性的任务,如日志...
SpringMVC中的拦截器-拦截器方法的作用和执行顺序.avi
1. 创建自定义拦截器类:你需要创建一个实现了`HandlerInterceptor`接口的类,这个接口包含三个方法:`preHandle()`, `postHandle()`, 和 `afterCompletion()`。这些方法会在请求生命周期的不同阶段被调用。 ```...
6. **拦截器**:Spring MVC的拦截器允许我们在请求被处理之前或之后执行自定义逻辑。在登录系统中,拦截器常用于检查请求是否来自已登录用户,如果未登录,可能会重定向到登录页面。 7. **视图解析器**:Spring MVC...
2. **自定义拦截器实现**:你可以通过实现`org.apache.cxf.interceptor.Fault`和`org.apache.cxf.phase.Phase`接口来自定义拦截器。`Phase`接口定义了拦截器执行的阶段,如PRE_INVOKE、POST_INVOCATION等。每个拦截...
拦截器的主要方法包括preHandle、postHandle和afterCompletion,分别在请求处理前、处理后以及整个请求完成后的不同阶段执行。 配置JSON拦截器通常涉及到以下几个步骤: 1. **创建拦截器类**:首先,我们需要创建...