登录检查:
@GetMapping("/main.html")public String mainPage(HttpSession session, Model model){Object loginUser = session.getAttribute("loginUser");if(loginUser != null){return "main";}else{model.addAttribute("msg": "请重新登陆");return "login";}}
太麻烦了
拦截器接口: handlerInterceptor
public interface HandlerInterceptor {default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return true;}default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {}default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {}}
弄拦截器:
定义类
public class LoginInterceptor implements HandlerInterceptor {// 目标方法执行之前@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {HttpSession session = request.getSession();Object loginUser = session.getAttribute("loginUser");if(loginUser != null){return true;}else{session.setAttribute("msg", "请先登陆");response.sendRedirect("/");return false;}}// 目标方法执行完之后@Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);}// 页面渲染只后@Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {HandlerInterceptor.super.afterCompletion(request, response, handler, ex);}}
配置 -> 实现WebMvcConfigurer的addInterceptor方法
新建配置类
@Configurationpublic class AdminWebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**") // 静态资源也会被拦截.excludePathPatterns("/", "/login", "/res/**");}}
可以通过链式调用来指定放行和拦截的路径
别忘了放行静态资源;
