SpringBoot 增加过滤器

2021-03-30  本文已影响0人  原始人y

1、创建一个filter 过滤器类,并集成 OncePerRequestFilter
OncePerRequestFilter,顾名思义,它能够确保在一次请求中只通过一次filter
2、实现代码如下:

@Component
@Order(0)
public class LogFilter extends OncePerRequestFilter {

    @Autowired
    private UserBehaviorLogService userBehaviorLogService;
    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {

        try {
            Long start=System.currentTimeMillis();
            request.setAttribute("startTime",start);
//执行下一个拦截器
            filterChain.doFilter(request, response);
        } finally {
            String method=request.getRequestURI();
            if(!method.contains("swagger")&&!method.contains("api-docs")){
                Long start=(long)request.getAttribute("startTime");
                Long elapsedTime=System.currentTimeMillis()-start;
                Long userId= AuthUtils.getReqUserId(request)==null?0l: AuthUtils.getReqUserId(request);
                String ip=request.getRemoteAddr();
                UserBehaviorLog userBehaviorLog=new UserBehaviorLog();
                userBehaviorLog.setUserId(userId);
                userBehaviorLog.setElapsedTime(elapsedTime);
                userBehaviorLog.setMethod(method);
                userBehaviorLog.setIp(ip);
                userBehaviorLog.setVersion(request.getHeader("version"));
                userBehaviorLog.setDeviceType(request.getHeader("deviceType"));
//保存数据库
                userBehaviorLogService.save(userBehaviorLog);
            }
        }
    }
}
``
上一篇 下一篇

猜你喜欢

热点阅读