SpringBoot项目中设置拦截器,分为两步:1.创建拦截器类;2.编写配置类来完成拦截器的配置

由于需要登录后才可以执行操作比较多,所以,应该使用拦截器进行统一处理!在处理过程中,如果获取不到用户的登录信息,则可以将用户的请求重定向到登录页面!

1.创建连接器类

具体实现步骤:在项目的根包下创建一个interceptor包 -> 包中创建一个LoginInterceptor类 ->实现接口HandlerInterceptor->重写接口中的preHandle方法->在方法中进行判断实现代码->具体代码如下:

public class LoginInterceptor implements HandlerInterceptor {

    //重写preHandle方法
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //如果session中的uid为空,就说明还没有登录,则重定向到登录页面,阻止进入其他页面。
        //false:阻止;true:放行。
        if(request.getSession().getAttribute("uid")==null) {
            response.sendRedirect("/web/login.html");
            return false;
        }
        return true;
    }
}

注意:false:表示阻止;true:表示放行。这段判断代码的解释就是:当session中‘uid’为空时,说明用户尚未登录,然后重定向到登录页面,重新登录;否则就放行。

2.编写配置类来完成拦截器的配置

说明:在SpringBoot项目中,没有XML文件用于配置,所以需要编写配置类来完成拦截器的配置。
具体实现步骤:在根包下创建一个名为’config’的包->在包中声明一个名为‘ InterceptorConfigurer’的类,类名随意,但尽量见名知意->在类的声明之前添加注解‘@Configuration’,添加了注解框架才会读取这个类->实现接口‘WebMvcConfigurer’->重写‘addInterceptors’方法,注册拦截器->在方法中实现具体代码,如下:
//在根包下创建的config包中,声明类之前要添加注解,框架才会调用这个类完成的配置。

@Configuration
public class InterceptorConfigurer implements WebMvcConfigurer {

    //重写方法,注册拦截器(InterceptorRegistry)
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建拦截器类
        HandlerInterceptor interceptor=new LoginInterceptor();

        List<String> patterns=new ArrayList<>();
        patterns.add("/users/reg");
        patterns.add("/users/login");
        patterns.add("/web/register.html");
        patterns.add("/web/login.html");
        patterns.add("/bootstrap3/**");
        patterns.add("/css/**");
        patterns.add("/images/**");
        patterns.add("/js/**");
        //注册拦截器类,添加黑名单(addPathPatterns("/**")),‘/*’只拦截一个层级,'/**'拦截全部
        // 和白名单(excludePathPatterns("List类型参数")),将不必拦截的路径添加到List列表中
        registry.addInterceptor(interceptor).addPathPatterns("/**").excludePathPatterns(patterns);
    }
}

注意:

  • 在方法中注册拦截器类‘registry.addInterceptor(interceptor)’,之前要新建上面创建的拦截器类‘LoginInterceptor’;然后再添加黑名单和白名单,黑名单内容是要拦截的路径,白名单是不用拦截的路径
  • == 黑名单‘addPathPatterns’中的‘/**’,代表全部层级的内容,表示要拦截全部内容。‘/*’:值代表一个层级。==
  • 白名单‘excludePathPatterns(“List类型参数”)’,参数内容是List类型的参数,这样能将要放行的路径添加到List列表中。