spring拦截器中使用spring的自动注入

需要在spring的拦截器中使用自定义的服务,这要就设计到将服务注入到拦截器中。网上看的情况有两种:

1、

1 @Configuration
 2 public class OptPermissionHandlerInterceptor extends HandlerInterceptorAdapter {
 3   private Logger logger = LoggerFactory.getLogger(OptPermissionHandlerInterceptor.class);
 4
 5   @Autowired
 6   private OperatorLogService operatorLogService; //这里使用@Autowired无法注入成功
 7
 8   @Override
 9   public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws      Exception {
10         if (true) {
11             return true;
12         } else {
13             String result = "当前登录用户无权限!";
14             response.getOutputStream().write(result.getBytes());
15             response.setStatus(HttpStatus.OK.value());
16             return false;
17         }
18   }
19
20   @SuppressWarnings("rawtypes")
21   @Override
22   public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
23     try {
24       if (handler instanceof HandlerMethod) {
25            HandlerMethod handlerMethod = (HandlerMethod) handler;
26            String beanName = handlerMethod.getBean().getClass().toString();
27            String methodName = handlerMethod.getMethod().getName();
28            String uri = request.getRequestURI();
29            String remoteAddr = request.getRemoteAddr();
30            String sessionId = request.getSession().getId();
31
32            OperatorLog optLog = new OperatorLog();
33            optLog.setBeanName(beanName);
34            optLog.setMethodName(methodName);
35            optLog.setRemoteAddr(remoteAddr);
36            optLog.setSessionId(sessionId);
37            optLog.setUri(uri);
38
39       if (operatorLogService == null) {//解决service为null无法注入问题
40          System.out.println("operatorLogService is null!!!");
41          BeanFactory factory = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
42          operatorLogService = (OperatorLogService) factory.getBean("operatorLogService");
43       }
44       operatorLogService.saveOperatorLog(optLog);
45      }
46    } catch (Exception e) {
47        logger.error("", e);
48    }
49   }
50
51   @Override
52   public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
53       Exception ex) throws Exception {
54
55   }
56
57 }

2、

1 @Override
 2     public void addInterceptors(InterceptorRegistry registry) {
 3         registry.addInterceptor(sessionInterceptor())
 4                 .addPathPatterns("/**")
 5                 .excludePathPatterns( "/push/**");
 6         super.addInterceptors(registry);
 7     }
 8
 9 @Bean
10     public SessionInterceptor sessionInterceptor() {
11         return new SessionInterceptor();
12     }

第二种的方式中 sessionInterceptor类中也可以使用:@Configuration,总之就是需要让spring进行管理。

Original: https://www.cnblogs.com/lcngu/p/8822432.html
Author: ngulc
Title: spring拦截器中使用spring的自动注入

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/541536/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • SpringBoot+vue中@Valid表单验证并返回给前端

    总共分为3大步 1) 完成表单验证 1.导入表单验&#x8BC…

    Java 2023年6月16日
    093
  • Java 构造器

    构造器 构造器能在实例化对象的时候直接传入参数,使对象完成我们设定的初始化,构造器本质上就是一个成员方法,在实例化对象时,会运行构造器方法,但是它没有返回值,且由无需自己调用, J…

    Java 2023年6月5日
    092
  • Java基础–Java语言介绍

    Java是一种半编译半解释的语言。1、编译阶段使用指令:javac这个阶段,Java编译器(也就是JVM:java虚拟机,后称JVM),首先把你的代码加载完成,然后开始检查语法。此…

    Java 2023年5月29日
    091
  • elasticsearch开发学习及踩坑实录

    1.elasticsearch7.+需要jdk11 / elasticsearch6.+需要jdk8 , 如果是Java开发的同学本地开发使用jdk8 , 可以下载一个解压版的jd…

    Java 2023年6月15日
    068
  • RabbitMQ

    RabbitMQ 六大模式 Hello Word 消息提供者 消息消费者 Work Queues 抽取工具类 Consumer 消息发送者 消息应答 自动应答 手动应答 消息重新入…

    Java 2023年6月13日
    080
  • 多线程与高并发(四)—— 根据 HotSpot 源码讲透 Java 中断机制

    前言 我们首先介绍中断的三个 APPI 及其底层代码,在对方法的实现有了清晰的认知后,再结合场景谈谈什么是中断,以及中断该如何正确使用? 一、中断方法 1. isInterrupt…

    Java 2023年6月9日
    052
  • Java 确定两个区间范围是否有交集

    java;gutter:true; @Test public void test01() {</p> <pre><code> Double[] …

    Java 2023年5月29日
    084
  • Oracle新建用户

    注:本文针对像我之前一样刚入Oracle服务器的新手,运用极简形式快速入门,更多知识,请看本人博客! 1.创建临时表空间 说明: &#x4E34;&#x65F6;&…

    Java 2023年6月8日
    089
  • Elasticsearch 入门实战(2)–安装

    本文主要介绍 Elasticsearch 的安装,使用到的环境及软件信息如下:CentOS 7.6.1810、Elasticsearch 8.2.2。 1、主机参数调整 安装 El…

    Java 2023年6月16日
    089
  • 【力扣】525. 连续数组

    给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。 示例 1: 输入: nums = [0,1]输出: 2说明: [0, 1…

    Java 2023年6月8日
    064
  • Android 快速点击的处理

    为了对付拥有麒麟臂的测试人员或者用户对我们的按钮等控件展开惨无人道的快速啄击。厮以为可以用如下方法: 1 setEnabled 大法;在用户点击发生后调用setEnable(fal…

    Java 2023年6月9日
    061
  • java面试——反射与泛型

    《java核心技术》 官方套话:能够分析类能力的程序成为反射。 又通过网上搜索有这句话: 反射指程序可以访问、检测和修改它本身状态或行为的一种能力。 “明明我自己能直接…

    Java 2023年6月9日
    0105
  • css 隐藏元素

    display , visibility 仅会改变元素显示,不会改变元素种类。可以配合 js 使用使元素可以动态的显示隐藏。 可以使用 display 或 visibility 实…

    Java 2023年6月5日
    096
  • 【Unity】在Unity中通过触发播放音频

    1、创建音频播放组件 首先在Hierarchy窗口中新建空组件。 选中新建的组件,在Inspector窗口中添加组件”Audio Source”,并将要播放…

    Java 2023年6月9日
    0110
  • SpringBoot自动装配

    1、SpringBoot自动装配是什么? 关键文件: META-INF/spring.factories 启动器:spring-boot-starter-XXX 文件中的配置的类型…

    Java 2023年6月5日
    0103
  • 热部署只知道devtools吗?JRebel不香吗?

    前言 JRebel收费怎么破? 什么是本地热部署? 什么是远程热部署? JRebel和devtools的区别 如何安装JRebel? 如何本地热部署? 如何远程热部署? 多模块开发…

    Java 2023年6月14日
    0106
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球