• SpringBoot 增加 拦截器 判断是否登录


    1、创建拦截器

    package com.example.demo.interceptor;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.web.servlet.HandlerInterceptor;
    import org.springframework.web.servlet.ModelAndView;
    
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 〈一句话功能简述〉<br>
     * 〈拦截器〉
     *
     * @author 丶Zh1Guo
     * @create 2018/11/22
     * @since 1.0.0
     */
    public class LoginInterceptor implements HandlerInterceptor {
        private Logger logger = LoggerFactory.getLogger(LoginInterceptor.class);
    
        // 在请求处理之前,只有返回true才会执行请求
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            logger.info("[拦截器]启动登录状态拦截");
            // 得到session
            HttpSession session = request.getSession();
            logger.info("[拦截器]sessionID:" + session.getId());
            // 得到用户信息
            Object userInfo = session.getAttribute("userInfo");
            //判断用户是否登录
            if (userInfo != null) {
                logger.info("[拦截器]用户已经登录,用户名,密码:" + session.getAttribute("userInfo"));
                return true;
            } else {
                //不存在跳转至登录页
                response.sendRedirect(request.getContextPath() + "/");    // 跳转到首页登录
                logger.info("[拦截器]用户没有登录,已跳转到:" + request.getContextPath() + "/");
                return false;
            }
        }
    
        // 视图渲染后执行
        @Override
        public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    
        }
    
        // 请求处理后,视图渲染前
        @Override
        public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    
        }
    }

    2、.继承WebMvcConfigureAdapter类,覆盖其addInterceptors接口,注册自定义的拦截器

    @Configuration 注解一定要有
    package com.example.demo.interceptor;
    
    import org.springframework.context.annotation.Configuration;
    import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
    import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
    
    /**
     * 〈一句话功能简述〉<br>
     * 〈自定义配置类〉
     *
     * @author 丶Zh1Guo
     * @create 2018/11/22
     * @since 1.0.0
     */
    @Configuration
    public class LoginConfig implements WebMvcConfigurer {
    
        /**
         * 该方法用于注册拦截器
         * 可注册多个拦截器,多个拦截器组成一个拦截器链
         */
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            // addPathPatterns 添加路径
            // excludePathPatterns 排除路径
            registry.addInterceptor(new LoginInterceptor())
                    .addPathPatterns("/sys/*"); // 拦截sys路径下的url
    //              .excludePathPatterns("");
        }
    }

    3、LoginController

    /**
     * Copyright (C), 2017-2018, XXX有限公司
     * FileName: LoginController
     * Author:   丶Zh1Guo
     * Date:     2018/11/22 11:10
     * Description: 登录
     * History:
     * <author>          <time>          <version>          <desc>
     * 作者姓名           修改时间           版本号              描述
     */
    package com.example.demo.controller;
    
    import com.example.demo.dao.UserDAO;
    import com.example.demo.pojo.User;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    import org.springframework.web.bind.annotation.ResponseBody;
    
    import javax.servlet.http.HttpServletRequest;
    
    /**
     * 〈一句话功能简述〉<br>
     * 〈登录〉
     *
     * @author 丶Zh1Guo
     * @create 2018/11/22
     * @since 1.0.0
     */
    @Controller
    public class LoginController {
        // 日志
        private Logger logger = LoggerFactory.getLogger(LoginController.class);
    
        @Autowired
        private UserDAO userDAO;
    
    
        // 启动服务自动跳转登录
    //    @RequestMapping(value = {"/", "/login"})
        @RequestMapping(value = "/")
        public String login() {
            return "login";
        }
    
        // 登录
        @RequestMapping(value = "/loginCheck", method = RequestMethod.POST)
        @ResponseBody
        public String loginCheck(HttpServletRequest request) {
            // 获取登录信息
            String userName = request.getParameter("userName");
            String password = request.getParameter("password");
    
            // 封装成对象
            User user = new User();
            user.setUserName(userName);
            user.setPassword(password);
    
            // 校验用户信息
            User info = userDAO.checkUser(user);
            if (info != null) {
                request.getSession().setAttribute("userInfo", userName + "-" + password);
                logger.info("登录成功,用户名:" + userName + "密码:" + password);
                return "success";
            } else {
                logger.info("登录失败,用户名:" + userName + "密码:" + password);
                return "fail";
            }
        }
    }

    4、未登录会自动跳转到登录页面

  • 相关阅读:
    2019年----沉淀的一年
    条目八《永不建立auto_ptr的容器》
    条目七《如果容器中包含了通过new操作创建的指针,切记在容器对象析构前将指针delete掉》
    条目六《当心C++编译器中最烦人的分析机制》
    条目五《尽量使用区间成员函数代替它们的单元素兄弟》
    cpu上下文切换
    条目四《用empty来代替检查size()是否为0》
    条目三《确保容器中的副本对象高效而正确》
    ORB与LBP、HOG
    C++
  • 原文地址:https://www.cnblogs.com/wangzh1guo/p/10001649.html
Copyright © 2020-2023  润新知