一、創建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配置文件上配置,否則頁面加載不到樣式
