一、創建interceptor包,在interceptor中創建一個攔截器並實現HandlerInterceptor
代碼:
@Component public class LoginHandlerInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //攔截邏輯 Object user = request.getSession().getAttribute("loginUser"); if (user == null) { System.out.println("沒有權限請先登陸"); //未登陸,返回登陸界面 request.setAttribute("msg","沒有權限請先登陸"); request.getRequestDispatcher("/login").forward(request,response); return false; } else { //已登陸,放行請求 return true; } } }
注意一下:在低版本的SpringBoot中需要實現postHandle方法和afterCompletion方法,高版本的SpringBoot需要用到這兩個方法直接重寫就行了,在這就不做過多的介紹了。
二、創建一個SpringMvc配置類並實現WebMvcConfigurer類
代碼:
@Configuration public class MyWebMvcConfiguration implements WebMvcConfigurer { @Autowired LoginHandlerInterceptor loginHandlerInterceptor; @Override public void addViewControllers(ViewControllerRegistry registry) { registry.addViewController("/").setViewName("forward:/login"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); } //注冊攔截器 @Override public void addInterceptors(InterceptorRegistry registry) { //攔截所有的請求 registry.addInterceptor(loginHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login", "/register").excludePathPatterns("/static/**"); } }
注意:在SpringBoot中,只能通過創建SpringMVC配置文件來注冊攔截器,
.addPathPatterns("/**")表示攔截所有的請求,
excludePathPatterns表示路徑不需要攔截哪些路徑
一定要在這里排除攔截static路徑下的靜態文件,或者在SpringBoot配置文件上配置,否則頁面加載不到樣式