Spring Boot 的拦截器的配置
ps.(可能不是最好的步骤,但是简单的配置大概就是这样,大家可上网自己去查询)
步骤大览
1.创建拦截器类并实现 HandlerInterceptor 接口。
2.创建一个Java类继承WebMvcConfigurer并重写 addInterceptors 方法。
3.实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)。
1.(创建java类实现 HandlerInterceptor 接口)是一个拦截器
我这里是判断拦截的登录信息中的是否有 uid
(数据库中对应的用户的id,取名为uid. 在登录的时,我把用户对应的username和uid放到了session中,方便获取用户的信息)
类名 interceptor
package store.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.servlet.HandlerInterceptor;
/**
* 登录拦截器
*/
public class LoginInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// 获取HttpSession对象
HttpSession session = request.getSession();
// 判断session中是否有登录信息
if (session.getAttribute("uid") == null) {
// 没有登录信息,则重定向到登录页
response.sendRedirect("/web/login.html");
// 执行拦截
return false;
}
// 放行
return true;
}
}
2.(创建一个Java类继承WebMvcConfigurer并重写 addInterceptors 方法。
注意添加配置文件的注释 @Configuration)
package store.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration // 方便springBoot去扫描这个类
public class InterceptorConfigurer implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
}
}
3.实例化我们自定义的拦截器,然后将对像手动添加到拦截器链中(在addInterceptors方法中添加)
package store.config;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import cn.tedu.store.interceptor.LoginInterceptor;
@Configuration // 方便springBoot去扫描这个类
public class InterceptorConfigurer
implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
// 创建拦截器对象
HandlerInterceptor interceptor = new LoginInterceptor();
// 不拦截名单
List<String> patterns = new ArrayList<>();
patterns.add("/bootstrap3/**");
patterns.add("/css/**");
patterns.add("/js/**");
patterns.add("/images/**");
patterns.add("/web/register.html");
patterns.add("/web/login.html");
patterns.add("/web/index.html");
patterns.add("/web/product.html");
patterns.add("/users/reg");
patterns.add("/users/login");
patterns.add("/districts/**");
patterns.add("/products/**");
// 注册拦截器
registry.addInterceptor(interceptor) //添加你自定义拦截器的实现逻辑类 我添加的是上面的继承了 HandlerInterceptor 接口的类
.addPathPatterns("/**") //添加要拦截的路径 拦截所有的页面
.excludePathPatterns(patterns); ///添加你不需要拦截的请求路径 把 List 的集合放入,如有需要以后把不拦截的添加到List集合中即可
}
}