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