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列表中。