zoukankan      html  css  js  c++  java
  • springboot的拦截器

    用于场景:有些后台页面需要登录后才能访问

    直接上代码:

    第一步:新建一个自己的拦截器:建立拦截器有两种

    方式一:

    HandlerInterceptor实现该类的
    preHandle接口
    public class AdminInterceptor implements  HandlerInterceptor {
    
        /**
         * 在请求处理之前进行调用(Controller方法调用之前)
         */
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
    //        System.out.println("执行了TestInterceptor的preHandle方法");
            try {
                //统一拦截(查询当前session是否存在user)(这里user会在每次登陆成功后,写入session)
                User user=(User)request.getSession().getAttribute("USER");
                if(user!=null){
                    return true;
                }
                response.sendRedirect(request.getContextPath()+"你的登陆页地址");
            } catch (IOException e) {
                e.printStackTrace();
            }
            return false;//如果设置为false时,被请求时,拦截器执行到此处将不会继续操作
                          //如果设置为true时,请求将会继续执行后面的操作
        }
    

      

    方式二:

    HandlerInterceptorAdapter继承该类。并重写
    preHandle方法,如下:
    public class MyInterceptor extends HandlerInterceptorAdapter {
        @Override
        public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
            Object object=request.getSession().getAttribute("user");
            if(!(handler instanceof HandlerMethod)){
                return true;
            }
            if(object!=null){
                return true;
            }else{
                request.getRequestDispatcher("/admin/login").forward(request,response);
                return false;
            }
    
        }
    
    }
    

      截图说明下,我用的是第二种方式建立拦截器的

    第二步:把自己写的拦截器注入,现实WebMvcConfigurer类,并来调用,代码如下:

    @Configuration
    public class MyWebAppConfigurer implements WebMvcConfigurer {
    
        @Override
        public void addInterceptors(InterceptorRegistry registry) {
            registry.addInterceptor(new MyInterceptor())
                    .addPathPatterns("/admin/**")
                    .excludePathPatterns("/admin/login").excludePathPatterns("/admin/doLogin");
    
        }
    }
    

      截图说明下:

     第三步:登录成功的操作:主要是要把用户信息储存到session中,拦截器中好做判断。

        @ApiOperation(value = "用户登录", notes = "用户登录")
        @ApiImplicitParams({
                @ApiImplicitParam(paramType = "query", name = "username", value = "用户名", required = true, dataType = "string"),
                @ApiImplicitParam(paramType = "query", name = "password", value = "用户密码", required = true, dataType = "string")
        })
        @RequestMapping(value = "doLogin",method = RequestMethod.POST)
        public String doLogin(String username, String password, ModelMap modelMap, HttpSession session){
            User user=userService.byUserName(username);
            if(null !=user){
                if(user.getPassword().equals(MD5Tool.md5(password))){
                    modelMap.put("user",user);
                    session.setAttribute("user",user);//把用户储存到session中
                    return "index";
                }else{
                    return "login";
                }
            }else{
                return "login";
            }
    
        }
    

      就三步,个人理解,错误的地方请大家指点,谢谢!

  • 相关阅读:
    Manage by Xcode
    CrashLog查看
    关于NSDateFormatter的格式dd是月天,DD是年天
    【转】 XCode的一些调试技巧
    应用程序互相跳转
    【转】如何将TapkuLibrary框架添加到Xcode4工程项目中
    NSString initWithBytes: 有最大值限制
    在一个workspace中的 各个工程 最好设置一致
    从桌面应用自动化测试看移动应用自动化测试
    基于Android平台应用程序的关键字驱动自动化测试 – 理论、工具和实践
  • 原文地址:https://www.cnblogs.com/chenlijing/p/14957681.html
Copyright © 2011-2022 走看看