handlerInterceptor拦截器的解析及使用

源码解析

public interface HandlerInterceptor {
    
    //表示在所有请求之前完成的拦截,一般使用居多
    default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }
    
    //表示请求之后,返回值返回到视图解析器时,完成拦截功能
    default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    }
    
    //表示在DispatcherServlet进行视图的渲染之后,多用于资源的回收
    default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    }
}

Springboot项目使用拦截器步骤:

1.定义一个拦截类,实现handlerInteceptor接口,重写相应的拦截方法。

/**
 * 用于拦截有些页面只有在登录的情况下才可以访问
 */
public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 用于拦截登录之后才可以访问的资源页面
     * @param request
     * @param response
     * @param handler
     * @return 返回一个boolean值
     * @throws Exception
     */
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        //1.获取到登录时session中的数据
        Object obj = request.getSession().getAttribute("Uid");
        //2.判断session中存不存在数据,不存在数据说明用户并未登录
        if(obj == null){
            //2.1如果用户没有登录,则需要重定向到login.html页面
            response.sendRedirect("/web/login.html");
            return false;
        }
        //3.如果if语句并没有执行,则放行
        return true;
    }

}

2.注册过滤器分析:

2.1白名单:

白名单是指在用户不登陆的情况下,就可以访问的页面资源,比如:login.html\register.html\index.html\/users/register等

2.2黑名单:

黑名单是指在用户登录的情况下才可以进行访问的页面资源。比如:password.html等

3.注册过滤器的技术:

借助WebMvcConfigurer接口,可以将用户定义的拦截器进行注册,才能够保证拦截器能够生效和使用。

/**
 * 用于完成拦截器的注册
 */
@Configuration
public class LoginInterceptorConfig  implements WebMvcConfigurer {


    //用于注册拦截器的方法
    public void addInterceptors(InterceptorRegistry registry) {
        //1.创捷拦截器对象
        LoginInterceptor interceptor =new LoginInterceptor();

        //2.定义一个集合,用来存储将不进行过滤的资源
        List<String> list=new ArrayList<String>();
        list.add("/bootstrap3/**");
        list.add("/css/**");
        list.add("/images/**");
        list.add("/js/**");
        list.add("/web/login.html");
        list.add("/web/register.html");
        list.add("/index.html");
        list.add("/web/product.html");
        list.add("/users/login");
        list.add("/users/register");
        registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(list);
    }

}

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值