Springboot(HandlerInterceptorAdapter)中注⼊⽆效1,传统filter和HandlerInterceptorAdapter的区别
springboot对传统Filter进⾏增强,添加更多细粒度的操作,分别实现预处理、后处理(调⽤了Service并返回ModelAndView,但未进⾏页⾯渲染)、返回处理(已经渲染了页⾯)
在preHandle(预处理)中,可以进⾏编码、安全控制等处理;
在postHandle(后处理)中,有机会修改ModelAndView;
在afterCompletion(返回处理)中,可以根据ex是否为null判断是否发⽣了异常,进⾏⽇志记录。
总之,传统的filter可以完成的功能,HandlerInterceptorAdapter都以完成。更详细信息可以查看HandlerInterceptorAdapter源码。
2,HandlerInterceptorAdapter的⼦类中,注⼊⽆效问题。
正确的步骤如下:
2.1,写⼀个类,继承HandlerInterceptorAdapter(抽象类),并重写响应的⽅法。
@SuppressWarnings("ALL")
@Component
public class GlobalInterceptor extends HandlerInterceptorAdapter {
@Autowired
ReportLogEntityMapper logService;
private long start = System.currentTimeMillis();
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse response, Object handler) throws Exception {
start = System.currentTimeMillis();
return super.preHandle(httpServletRequest, response, handler);
}
//存储查询消耗时间,以后优化代码时查询
@Override
public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception { ReportLogEntity logEntity = new ReportLogEntity();
logEntity.setCostTime((System.currentTimeMillis() - start));
logEntity.setRequestUrl(new RequestURL()));
logEntity.RequestURI());
logEntity.QueryString());
logEntity.RemoteAddr());
logEntity.setCreatedDate(new Date());
logService.insertSelective(logEntity);
}
2.2,将该类在启动的时候,通过注解(@Component)交给spring托管,
2.3,在WebMvcConfigurerAdapter类的⼦类中的
@Configuration
public class InterceptorConfig extends WebMvcConfigurerAdapter {
@Autowired
private GlobalInterceptor globalInterceptor;
springboot和过滤器public static void main(String[] args) {
SpringApplication.run(SuperrescueReportingApplication.class, args);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new ReportInterceptor()).addPathPatterns("/**");
registry.addInterceptor(globalInterceptor);
super.addInterceptors(registry);
}
}
注册即可。
上⾯主要做的事情就是,1,继承HandlerInterceptorAdapter,2,继承WebMvcConfigurerAdapter并注册,这⾥注册的时
候,HandlerInterceptorAdapter⼦类必须是交给spring托管后的⼦类。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论