springMVC实现登陆

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

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会产生表单重复提交。

springMVC实现登陆

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";
        }
    }
点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Stella981 Stella981
2年前
Python+Selenium自动化篇
本篇文字主要学习selenium定位页面元素的集中方法,以百度首页为例子。0.元素定位方法主要有:id定位:find\_element\_by\_id('')name定位:find\_element\_by\_name('')class定位:find\_element\_by\_class\_name(''
Stella981 Stella981
2年前
Django之Django模板
1、问:html页面从数据库中读出DateTimeField字段时,显示的时间格式和数据库中存放的格式不一致,比如数据库字段内容为2012082616:00:00,但是页面显示的却是Aug.26,2012,4p.m.答:为了页面和数据库中显示一致,需要在页面格式化时间,需要添加<td{{dayrecord.p\_time|date:
Stella981 Stella981
2年前
JOptionPane修改图标
1.在Linux平台下.JOptionPane会显示Java默认的图标,在window平台不显示图标,如何替换这个图标了?2JOptionPane.setIcon(Icon)修改的是内容区域的icon,而不是左上角的Icon.所以需要通过修改Jdialog/Frame的图标来达到修改默认图标的问题.3.代码:if(JOptio
Stella981 Stella981
2年前
Spring Security 常见错误
登陆时提示用户已锁定。Useraccountislocked由于自定义用户对象实现了UserDetails接口,需要将接口默认方法返回值改为true即可。publicclassAuthUserDetailsimplementsUserDetails{}登陆时提示Ba
Stella981 Stella981
2年前
Nginx总结(2)—Nginx的反向代理
一、反向代理实例11、实现效果(1)打开浏览器,在浏览器中输入www.123.com,跳转到linux系统tomcat主页面。!(https://imgblog.csdnimg.cn/2020101614353374.png?xossprocessimage/watermark,type_ZmFuZ3
Wesley13 Wesley13
2年前
.Net中验证码图片生成
开发网站或平台系统,登录页面是必不可少的功能,但是现在很多人可以使用工具暴力破解网站密码,为了防止这类非法操作,需要在登录页面添加验证,验证码就是最常用的一种验证方式。我结合了自己的经验和网上的验证码资料,总结一下c验证码开发,直接放代码,文中有注释,可以轻松理解代码意思。功能:实现了打开登陆页面是生成验证码图片以及点击验证码时,刷新验证码功能,验
Stella981 Stella981
2年前
MVC基本登陆与验证码功能实现
一、基本登陆实现与验证码功能实现,该功能是和spring.net功能集合使用的,因为后面要用到验证是否处于登陆状态1\.先构建一个登陆页面1@{2Layoutnull;3}4<!DOCTYPEhtml5<html6<head
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这
Easter79
Easter79
Lv1
今生可爱与温柔,每一样都不能少。
文章
2.8k
粉丝
5
获赞
1.2k