日总结-spring boot拦截器200917
需求
平台招商需要为每个商家分配一个域名,访问该域名只展示该商家产品、商家资质等相关信息。
分析
思路:为商家绑定对应域名,平台对访问的域名进行解析匹配到商家则跳转到对应商家的界面。
前提条件:项目架构使用的是spring boot。
技术选型:过滤器、拦截器、aop
技术调研
解决方案
技术选型确认:根据需求我们只需要对访问平台主页的域名进行处理,既不需要大范围也不需要太灵活所以最终选择使用拦截器。
实现分析:创建一个拦截器,只对访问平台主页的url进行拦截处理,如果访问域名与商家匹配则重定向到对应商家页面。
解决过程
首先先创建一个拦截器,该拦截器的作用是根据域名查找商家,如果查找到了就进入商家界面,查找不到不做处理。
public class DoMainInterceptor implements HandlerInterceptor {
// 通过传参实例mapper,避免其在构造springContext容器之前执行产生异常
private MyMapper myMapper;
public DoMainInterceptor(MyMapper myMapper){
this.myMapper = myMapper;
}
// 匹配唯一商家
private String getSellerId(String url){
}
@Override
public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
String url = httpServletRequest.getRequestURL();
String sellerId = this.getSellerId(url);
if(!StringUtils.isEmpty(sellerId)){
// 重定向到对应页面并将商家标识放入
response.sendRedirect(request.getContextPath()+"/seller/"+sellerId);
return false;
};
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 {
}
}
第二步是将拦截器加入项目拦截链,并配置拦截范围。(只保留了关键代码)
@Configuration
@EnableWebMvc
public
class WebMvcConfig
extends WebMvcConfigurerAdapter {
@Autowired
private MyMapper
myMapper;
@Override
public
void addInterceptors(InterceptorRegistry
registry) {
// 设置拦截范围为只拦截主页
registry.addInterceptor(
new DoMainInterceptor(
myMapper)).addPathPatterns(
"/");
super.addInterceptors(
registry);
}
}
ok,大功告成。
孰能浊以静之徐清。孰能安以动之徐生。保此道者不欲盈,夫惟不盈故能弊不新成。