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