当接口被调用时使用Spring拦截器注入运行时数据

开发背景

使用CXF暴露与调用接口,为了方便追踪错误,所以想要在接口被调用时将一些运行时数据记录起来,所以就想到了拦截器。

CXF自带拦截器,但是据我初步了解,自带的拦截器都是经过封装,用来打印日志什么的,好像没有提供给开发者定制功能的方式(没有深入了解,如果有说错请方便斧正)

流程

其实Spring的拦截器使用挺方便的,实现org.aopalliance.intercept.MethodInterceptor接口中的invoke方法,在方法中实现想要的逻辑。然后在Spring配置文件中注入它就了事。

代码

拦截器实现方法

    @Override
    public Object invoke(MethodInvocation invocation) throws Throwable {
        //获取当前被调用的方法
        Method method = invocation.getMethod();
        String methodName = method.getDeclaringClass().getSimpleName() + "." + method.getName();
        //执行被拦截器拦截下来的方法,获得其返回值
        Object object = invocation.proceed();
        //做自己的逻辑,我这里将被调用的方法信息放入返回值中。
        if (object instanceof SimpleResult) {
            SimpleResult result = (SimpleResult) object;
            result.createMsg(methodName);
        }
        return object;
    }

将拦截器注入IOC容器中

<bean id="resultLogInterceptor" class="com.elin4it.demo.interceptor.ResultLogInterceptor"/>

配置拦截器

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <!--配置拦截器名-->
    <property name="interceptorNames">
        <list>
            <value>resultLogInterceptor</value>
        </list>
    </property>
    <!--要拦截的接口,可以使用通配符-->
    <property name="beanNames">
        <list>
            <value>*Facade</value>
        </list>

    </property>
</bean>
时间: 2024-10-13 21:58:03

当接口被调用时使用Spring拦截器注入运行时数据的相关文章

Spring异步调用原理及SpringAop拦截器链原理

一.Spring异步调用底层原理 开启异步调用只需一个注解@EnableAsync @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented @Import(AsyncConfigurationSelector.class) public @interface EnableAsync { /** * Indicate the 'async' annotation type to be detected at

Spring 拦截器实现事物

Spring+Hibernate的实质:就是把Hibernate用到的数据源Datasource,Hibernate的SessionFactory实例,事务管理器HibernateTransactionManager,都交给Spring管理.那么再没整合之前Hibernate是如何实现事务管理的呢?通过ServletFilter实现数据库事务的管理,这样就避免了在数据库操作中每次都要进行数据库事务处理.一.事务的4个特性: 原子性:一个事务中所有对数据库的操作是一个不可分割的操作序列,要么全做,

spring 拦截器简介

spring 拦截器简介 常见应用场景 1.日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV(Page View)等.2.权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面:3.性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录):4.通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提

Spring拦截器

Spring的拦截器具备在web的前置和后置来处理各种请求. 拦截器接口-HandlerInterceptor 自定义的拦截器,需要继承HandlerInterceptor接口,并且实现HandlerInterceptor中提供的三个方法: 1. preHandle 方法会在请求处理前被调用.这个方法返回boolean值,如果返回true则继续往下执行,如果返回false则中断. 2. postHandle 方法会在请求处理后,继续调用. 3. afterCompletion 方法会在视图渲染之

spring拦截器中修改响应消息头

问题描述 前后端分离的项目,前端使用Vue,后端使用Spring MVC. 显然,需要解决浏览器跨域访问数据限制的问题,在此使用CROS协议解决. 由于该项目我在中期加入的,主要负责集成shiro框架到项目中作为权限管理组件,之前别的同事已经写好了部分接口,我负责写一部分新的接口. 之前同事解决跨域问题使用Spring提供的@CrossOrigin注解: @RequestMapping(value = "/list.do", method = RequestMethod.GET) @R

spring 拦截器拦截点的配置

实用正则org.springframework.aop.support.RegexpMethodPointcutAdvisor 然后 <property name="advice"> <ref local="methodCacheInterceptor"/> </property> <property name="patterns"> <list> <value>.*_cac

springboot拦截器注入bean失败实例

如题,在spring拦截器中注入了一个service,结果运行时报了空指针: 2020-01-03 09:26:33.646 |-DEBUG [http-nio-9988-exec-3] org.springframework.web.servlet.DispatcherServlet [1100] -| Failed to complete request: java.lang.NullPointerException 2020-01-03 09:26:33.648 |-ERROR [http

Spring 拦截器的使用

一.Web.xml配置 在Web.xml 配置Spring核心控制器DispatcherServlet接收所有请求 <servlet> <servlet-name>springmvc</servlet-name> <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> <load-on-startup>1</load-on-

[十四]SpringBoot 之 Spring拦截器(HandlerInterceptor)

过滤器属于Servlet范畴的API,与spring 没什么关系. Web开发中,我们除了使用 Filter 来过滤请web求外,还可以使用Spring提供的HandlerInterceptor(拦截器). HandlerInterceptor 的功能跟过滤器类似,但是提供更精细的的控制能力:在request被响应之前.request被响应之后.视图渲染之前以及request全部结束之后.我们不能通过拦截器修改request内容,但是可以通过抛出异常(或者返回false)来暂停request的执