Springboot中拦截器的使用

通过拦截器来实现用户的登录页面和公开页面的访问,这里使用到了用户登录用将用户的id存储在session中,如果检测不到,就返回登录页面,否则就可以正常访问。实现的代码如下:
一、首先定义一个类,去实现HandlerInterceptor。重新里面的preHandle方法。

/**
 * 定义拦截器
 * 要起作用,需要两步:
 * 1、拦截器的定义: 去实现一个接口  HandlerInterceptor,下面的代码就是
 * 2、配置(注册)拦截器:添加白名单和黑名单: 需要在spring-mvc.xml或者WebMvcConfigure接口中进行注册,才能保证拦截器起作用。
 */

public class LoginInterceptor implements HandlerInterceptor {
    /**
     * 这里我们只使用preHandle,如果返回true则放行,否则阻止
     * @param request  请求对象
     * @param response  响应对象
     * @param handler 被调用的处理器对象,本质上是一个方法对象,对反射中的Method对象进行了再包装
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        Object uid = request.getSession().getAttribute("uid");
        if(uid == null){
            //没有登录,则重定向到login.html
            response.sendRedirect("/web/login.html");
            //结束后续的调用
            return false;
        }
        //请求放行
        return true;
    }
}

二、配置(注册)拦截器

/**
 * 注册拦截器
 */
@Configuration   //这是一个配置类,需要自动加载
public class LoginInterceptorConfigurer implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建自定义的拦截器对象
        HandlerInterceptor interceptor = new LoginInterceptor();
        //白名单需要提供一个List集合
        List<String> patterns = new ArrayList<>();
        patterns.add("/bootstrap3/**");   //** 表示所有,包括子目录中的文件
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        patterns.add("/web/index.html");
        patterns.add("/web/login.html");
        patterns.add("/web/register.html");
        patterns.add("/web/product.html");
        patterns.add("/users/reg");
        patterns.add("/users/login");
        patterns.add("/districts/**");
        patterns.add("/products/**");

        //完成自定义拦截器的注册,并完成配置
        registry.addInterceptor(interceptor)
                .addPathPatterns("/**")   //要拦截的url地址
                .excludePathPatterns(patterns); //不进行拦截的url地址
    }
}

目录结构:
Springboot中拦截器的使用_第1张图片

你可能感兴趣的:(spring,boot,java,servlet)