登录检查:

    1. @GetMapping("/main.html")
    2. public String mainPage(HttpSession session, Model model){
    3. Object loginUser = session.getAttribute("loginUser");
    4. if(loginUser != null){
    5. return "main";
    6. }else{
    7. model.addAttribute("msg": "请重新登陆");
    8. return "login";
    9. }
    10. }

    太麻烦了
    拦截器接口: handlerInterceptor
    image.png

    1. public interface HandlerInterceptor {
    2. default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    3. return true;
    4. }
    5. default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
    6. }
    7. default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
    8. }
    9. }

    弄拦截器:

    • 定义类

      1. public class LoginInterceptor implements HandlerInterceptor {
      2. // 目标方法执行之前
      3. @Override
      4. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      5. HttpSession session = request.getSession();
      6. Object loginUser = session.getAttribute("loginUser");
      7. if(loginUser != null){
      8. return true;
      9. }else{
      10. session.setAttribute("msg", "请先登陆");
      11. response.sendRedirect("/");
      12. return false;
      13. }
      14. }
      15. // 目标方法执行完之后
      16. @Override
      17. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      18. HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
      19. }
      20. // 页面渲染只后
      21. @Override
      22. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      23. HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
      24. }
      25. }
    • 配置 -> 实现WebMvcConfigurer的addInterceptor方法

    新建配置类
    image.png

    1. @Configuration
    2. public class AdminWebConfig implements WebMvcConfigurer {
    3. @Override
    4. public void addInterceptors(InterceptorRegistry registry) {
    5. registry.addInterceptor(new LoginInterceptor())
    6. .addPathPatterns("/**") // 静态资源也会被拦截
    7. .excludePathPatterns("/", "/login", "/res/**");
    8. }
    9. }

    可以通过链式调用来指定放行和拦截的路径
    别忘了放行静态资源;