• springMVC实现登陆


    • 页面打开跳转到登陆页面
    • 登陆成功跳转到成功页面
    • 登陆失败再次返回登录页面,并增加提示信息

    1、首页跳转到登陆页面

      Tomcat服务器启动时默认加载WEB-INF下的index.jsp,可以通过修改xml配置的方式来改变Tomcat这一默认行为。这里使用springMVC来实现这个功能。

      第一种实现方案是配置Controller,value值配成空字符串或者login,这样在访问8080端口或者直接输入login的时候回跳转到login.jsp。

        @RequestMapping(value = {"","login"},method = RequestMethod.GET)
        public String login(){
            return "login";
        }

      第二种是在springMVC配置文件里用XML的形式来实现上述结果。

            <mvc:view-controller path="/" view-name="login"/>
            <mvc:view-controller path="login" view-name="login"/>

    2、页面跳转

      这里只关注页面跳转的实现,用户验证暂不考虑。

      首先考虑登陆失败用什么样的方式回到login页面,重定向?转发?还是直接返回一个login字符串再解析一次?分别实验

    2.1 返回字符串

      如下所示,当用户认证不通过的时候返回login作为视图名,经由第一步配置的Controller直接再次调回到主页。

     @RequestMapping(value = "doLogin",method = RequestMethod.POST)
        public String login(HttpServletRequest request,
                                  @RequestParam("email")String email,
                                  @RequestParam("password")String password
                                  ){
            User user = userService.login(email, password);
            ModelAndView modelAndView = new ModelAndView();
            if (user!=null && user.getPassword().equals(password)){
                modelAndView.addObject("user",user);
                modelAndView.setViewName("success");
                return "redirect:/success";
            }else {
                //request.setAttribute("wrongMsg","用户名密码错误");
                //request.getSession().setAttribute("wrongMsg","用户名密码错误");
                return "login";
            }
        }

      这样做是能够实现直接跳转到主页的,但问题在于跳回到主页后url地址栏显示的仍是doLogin即前端表单提交的地址。这样首先让我感觉不舒服,我登陆页面应该是login为什么登陆失败跳到doLogin?其次这样不安全,多次刷新登陆失败后的doLogin会产生表单重复提交。

    2.2 forward

      把return改成"redirect:/logim"。产生的效果和上面直接返回字符串一样,失败后的页面也是doLogin,问题也同上。其实仔细想想,这两种方式后台的处理结果理应相同,返回String字符串,封装成ModelAndView对象,找到视图解析器,返回结果;返回forward,也是找到处理"login"请求的字符串,然后重复上面的结果。

      

    2.3 redirect

      总言而之上面两个都不是我想要的结果,我想要的结果是登陆失败后url地址栏里仍然是login,而不是doLogin。

      

     @RequestMapping(value = "doLogin",method = RequestMethod.POST)
        public String login(HttpServletRequest request,
                                  @RequestParam("email")String email,
                                  @RequestParam("password")String password
                                  ){
            User user = userService.login(email, password);
            ModelAndView modelAndView = new ModelAndView();
            if (user!=null && user.getPassword().equals(password)){
                modelAndView.addObject("user",user);
                modelAndView.setViewName("success");
                return "redirect:/success";
            }else {
                request.setAttribute("wrongMsg","用户名密码错误");
                request.getSession().setAttribute("wrongMsg","用户名密码错误");
                return "redirect:/login";
            }
        }

      

      

  • 相关阅读:
    MySQL数据库基准压力测试工具之MySQLSlap使用实例
    WPF水珠效果按钮组
    获取用户Ip地址通用方法常见安全隐患(HTTP_X_FORWARDED_FOR)
    leaflet的入门开发(一)
    linux 安装pip 和python3
    python模拟Get请求保存网易歌曲的url
    Phalcon 上下文编码(Contextual Escaping)
    (七十七)地理编码与反地理编码
    设计模式简单介绍
    windows下安装Jenkins
  • 原文地址:https://www.cnblogs.com/AshOfTime/p/10684848.html
Copyright © 2020-2023  润新知