拦截器进行登录检查

  1. 将数据存到session中

    @Controller
    public class LoginController {
    
        @RequestMapping("/user/login")
        public String login(@RequestParam("username") String username,
                            @RequestParam("password") String password,
                            Map<String,Object> map,HttpSession session){
    //   具体的业务
            if(!StringUtils.isEmpty(username) && "123".equals(password)){
    //            登录成功,防止表单重复提交,可以重定向到主页
                session.setAttribute("loginUser",username);//session 存数据(将用户名存到session中)
                return "redirect:/main.html";
            }else{
    //            告诉用户,你登录失败
                map.put("msg","用户名或密码错误");
                return "login";
            }
        }
    }
    
    1. 登录检查,没有登录进不去页面

      /**
       * @author tyh
       * @create 2020-09-09 21:42
       */
      //   登录检查,没有登录进不去页面
      public class LoginHanderInterceptor implements HandlerInterceptor {
      
          /**
           * 在请求处理之前进行调用(Controller方法调用之前)
           */
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
      //        System.out.println("执行了LoginHanderInterceptor的preHandle方法");
      //      登录成功之后,应该有用户的session
      //      统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session)
              Object loginUser = request.getSession().getAttribute("loginUser");  //获取session的值
      
              if(loginUser==null){
                  //没有登录,返回登录页面
                  request.setAttribute("msg","没有权限请先登录");
                  request.getRequestDispatcher("/index.html").forward(request,response);
                  return false;
              }else {
      //            已登录,放行请求
                  return true;
      //            如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
      //            如果设置为true时,请求将会继续执行后面的操作
              }
          }
      
          /**
           * 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)
           */
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
      
          }
      
          /**
           * 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)
           */
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
      
          }
      }
      
      1. 添加到容器中(拦截器配置)

        **
         * @author tyh
         * @create 2020-09-09 9:02
         */
        
        //应为类型要求为WebMvcConfigurer,所以我们实现其接口
        //可以使用自定义类扩展MVC的功能
        @Configuration
        //@EnableWebMvc
        public class MyMvcConfig implements WebMvcConfigurer {
        
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                //注册TestInterceptor拦截器
                InterceptorRegistration registration = registry.addInterceptor(new LoginHanderInterceptor());
                registration.addPathPatterns("/**");                      //所有路径都被拦截
                registration.excludePathPatterns(                         //添加不拦截路径
                        "/","/index.html",
                        "/user/login",             //登录
                        "/**/js/**",              //js静态资源
                        "/**/css/**",             //css静态资源
                        "/**/img/**"            //img静态资源
                );
            }
        }
        
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值