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进行管理。
分类:
spring
标签:
Interceptor
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2016-04-13 transient关键字