日总结-spring boot拦截器200917

需求
    平台招商需要为每个商家分配一个域名,访问该域名只展示该商家产品、商家资质等相关信息。
分析
    思路:为商家绑定对应域名,平台对访问的域名进行解析匹配到商家则跳转到对应商家的界面。
    前提条件:项目架构使用的是spring boot。
    技术选型:过滤器、拦截器、aop
技术调研
   
日总结-spring boot拦截器200917
日总结-spring boot拦截器200917
解决方案
    技术选型确认:根据需求我们只需要对访问平台主页的域名进行处理,既不需要大范围也不需要太灵活所以最终选择使用拦截器。
    实现分析:创建一个拦截器,只对访问平台主页的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,大功告成。
 
孰能浊以静之徐清。孰能安以动之徐生。保此道者不欲盈,夫惟不盈故能弊不新成。