拦截器HandlerInterceptor

1、类定义为Component组件(也可以不配置,定义为组件,后面用可以在容器里面取,不定义则直接new,第2步有说明),实现HandlerInterceptor 接口

@Component
public class CompanyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        String url = request.getRequestURI();
        String contextPath = request.getContextPath();
        url = url.replace(contextPath,"");
        //管理"/byCompany/"路径和主页路径的请求
        if(((url.contains("/byCompany/")&&!url.contains("/byCompany/selectCompany"))||url.equals("/")||url.startsWith("/index"))&& session.getAttribute("company_id")==null){
            response.sendRedirect(contextPath+"/byCompany/selectCompany");
        }
        return HandlerInterceptor.super.preHandle(request, response, handler);
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

2、定义配置类,将拦截器放到spring容器中

@Component
@AllArgsConstructor
public class InterceptorConfig implements WebMvcConfigurer {
    private CompanyInterceptor companyInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //如果CompanyInterceptor不定义为组件,那么直接new一个即可,就不需要注入
        //registry.addInterceptor(new CompanyInterceptor()));
        registry.addInterceptor(companyInterceptor)
        .addPathPatterns("/**")//拦截的路径,/**是拦截所有资源
        .excludePathPatterns("/","/login","/css/**","/js/**","/images/**","/fonts/**");//不拦截的路径
        WebMvcConfigurer.super.addInterceptors(registry);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值