Spring Boot自定义拦截器和转换器

Spring Boot自定义拦截器和转换器

自定义的拦截器要实现HandlerInterceptor接口,并且要将拦截器添加到Spring Boot容器中

1、用户登陆校验拦截器

拦截器:

/**
 * 判断用户是否登陆的拦截器
 * Created by Administratoron 2018/12/14
 **/
public class VisitInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {

        HttpSession session = httpServletRequest.getSession();
        MstUser mstUser = (MstUser) session.getAttribute("mstUser");
        if(mstUser==null || mstUser.getUserId()==null) {
            throw new UserNotLoginException("用户未登录!");
        }

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

2、分页拦截器

拦截器:

/**
 * 用于处理分页问题的拦截器,将pageNumber存储在session中
 * Created by Administratoron 2018/12/27
 **/
public class PageInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object o) throws Exception {

        // 从request中获取访问路径中的参数部分
        String args = request.getQueryString();
        HttpSession session = request.getSession();
        if(!StringUtils.isEmpty(args) && args.contains("page")) {
            Boolean flag = true;
            String[] strs = args.split("&");
            for(String str : strs) {
                if(str.contains("page")) {
                    String page = str.split("=")[1];
                    // 将pagec存放在session中
                    session.setAttribute("page", page);
                    flag = false;
                    break;
                }
            }
        } else {
            session.setAttribute("page", 0);
        }
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

    }

    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

    }
}

3、日期时间转换器

转换器:

/**
 * 日期时间转换器
 * Created by Administratoron 2018/12/10
 **/
@Component
public class StringToDateConverter implements Converter<String, Date> {

    @Override
    public Date convert(String s) {

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
        Date date = null;

        try {
            if(!StringUtils.isEmpty(s)) {
                date = sdf.parse(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        return date;
    }
}

4、添加拦截器和转换器

@Configuration
public class WebMvcConfig extends WebMvcConfigurerAdapter {
  
  	@Autowired
    private StringToDateConverter stringToDateConverter;

    /**
     * 添加拦截器
     * @param registry
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
      	// 添加用户登陆校验拦截器,拦截除登陆和登陆校验外的所有请求
        registry.addInterceptor(new VisitInterceptor()) 
                .addPathPatterns("/**") // 拦截的url
                .excludePathPatterns("/", "/login", "/index", "/loginCheck"); // 排除的url

        // 添加分页页面拦截器,只拦截url中含有list和search的请求
        registry.addInterceptor(new PageInterceptor()) 
                .addPathPatterns("/**/list/**", "/**/search/**");
        super.addInterceptors(registry);
    }

  	/**
     * 添加日期转换器
     */
    @Bean
    public ConversionService getConversionService(){
        ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
        Set<Converter> converters = new HashSet<Converter>();
        converters.add(stringToDateConverter);
        factoryBean.setConverters(converters);

        return factoryBean.getObject();
    }
}

参考文章:https://blog.csdn.net/qq_31871785/article/details/72863289#commentBox

猜你喜欢

转载自blog.csdn.net/hsg_happyLearning/article/details/85319736