SpringBoot 2.x中拦截器的使用

  • SpringBoot 2.x版本启用拦截器配置,会显示WebMvcConfigurerAdapter将被抛弃,使用WebMvcConfigurationSupport替代会导致静态资源不能访问的问题。
  • 发现只要继承 WebMvcConfigurationSupport 并且将文件加入配置 ,则在yml或properties中配置的相关内容会失效。
  • 解决办法是需要重新指定静态资源。

示例如下

  • 登录拦截器
@Component
public class BaseInterceptor implements HandlerInterceptor {
    private static final Logger logger = LoggerFactory.getLogger(BaseInterceptor.class);
    private static final String USER_AGENT = "user-agent";

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String uri = request.getRequestURI();
        String ip = IpUtil.getIpAddrByRequest(request);
        logger.info("UserAgent: {}", request.getHeader(USER_AGENT));
        logger.info("用户访问地址: {}, 来路地址: {}", uri, ip);

        //请求拦截处理
        HttpSession session = request.getSession();
        User user = (User) session.getAttribute(WebConst.LOGIN_SESSION_KEY);
        if (uri.startsWith("/admin") && !uri.startsWith("/admin/login") && null == user) {
            response.sendRedirect(request.getContextPath() + "/admin/login");
            return false;
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}
  • 拦截器配置类
@Configuration
public class WebMvcConfig extends WebMvcConfigurationSupport {

    @Resource
    private BaseInterceptor baseInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(baseInterceptor);
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/**")
                .addResourceLocations("classpath:/static/");
        super.addResourceHandlers(registry);
    }
}
SpringBoot 2.x中拦截器的使用_第1张图片
文件目录.png

你可能感兴趣的:(SpringBoot 2.x中拦截器的使用)