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";
}
}
springMVC实现登陆的更多相关文章
- SpringMVC 模拟登陆
新建BackgroundController类: package cn.bdqn.mvc.controller; import org.springframework.stereotype.Contr ...
- 模拟springmvc 内部登陆,跳过spring filter
说明,因为我们的一个项目B使用spring mvc配置的登陆框架,所以对登陆控制全部交给了spring,导致我们如果想通过另一个项目A登陆到项目B就不太容易,具体是项目A登陆了,我们通过一个连接直接跳 ...
- springmvc登陆拦截案例
一.web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi=&qu ...
- SpringMVC 登陆判断
struts2:extends ActionSupport @Override public String execute() throws Exception { User user = userS ...
- SpringMVC实现账号只能在一处登陆
一.问题引导 在Web开发中,实现一个账号只能在一处登陆有两种形式:1.当某个账号在某处登陆后,如果再在其他处登陆,将前一个账号挤掉:2.当某个账号登陆后,此账号在其他设备登陆提示已经登陆,无法登陆. ...
- shiro 基于springmvc中做登陆功能
1.添加依赖 <!-- shiro --> <dependency> <groupId>org.apache.shiro</groupId> <a ...
- SpringMVC拦截器的实现单方登陆
过滤器跟拦截器的区别 ①拦截器是基于java的反射机制的,而过滤器是基于函数回调.②拦截器不依赖与servlet容器,过滤器依赖与servlet容器.③拦截器只能对action请求起作用,而过滤器则可 ...
- 分享知识-快乐自己:SpringMVC 结合使用拦截器(判断是否用户是否已登陆)
基础拦截器操作: 拦截器是一种AOP操作实现,那么在AOP之中用户一定不需要去关注拦截器的存在,用户只需要按照自己已经习惯的处理方式进行代码的编写即可. 首先我们先创建一个自定义的拦截器: packa ...
- springmvc 登陆拦截器 配合shiro框架使用
public class LoginHandlerInterceptor extends HandlerInterceptorAdapter{ @Override public boolean pre ...
随机推荐
- Python读写文件你真的了解吗?
内容概述 Python文件操作 针对大文件如何操作 为什么不能修改文件? 你需要知道的基本知识 1. Python文件操作 这一部分内容不是重点,因为很简单网上很多,主要看看文件操作的步骤就可以了. ...
- 全文检索-Elasticsearch (一) 安装与基础概念
ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口 Elasticsearch由java开发,所以在搭建时,需先安 ...
- innodb是如何巧妙实现事务隔离级别
之前的文章mysql锁机制详解中我们详细讲解了innodb的锁机制,锁机制是用来保证在并发情况下数据的准确性,而要保证数据准确通常需要事务的支持,而mysql存储引擎innodb是通过锁机制来巧妙地实 ...
- 第一个Mybatis程序示例 Mybatis简介(一)
在JDBC小结中(可以参阅本人JDBC系列文章),介绍到了ORM,其中Mybatis就是一个不错的ORM框架 MyBatis由iBatis演化而来 iBATIS一词来源于“internet”和“aba ...
- [MySQL] 索引中的b树索引
1.索引如果没有特别指明类型,一般是说b树索引,b树索引使用b树数据结构存储数据,实际上很多存储引擎使用的是b+树,每一个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点的范围遍历 2.底层的 ...
- 拯救老旧工程,记桥接SpringMVC与Stripes框架
背景: 公司基础设施部门推出了自己的微服务框架(以下简称M),要求所有业务应用都要接入进去,但坑爹的是M只提供了SpringMVC工程的support,对于采用Stripes作为MVC框架的应用并不支 ...
- java重写与重载的区别
override(重写) :即把改方法重新写一次,内部逻辑可变,外壳不变,核心重写 1. 方法名.参数.返回值相同. 2. 子类方法不能缩小父类方法的访问权限. 3. 子类方法不能抛出比父类方法更多的 ...
- 常用的String原型
对于常用的字符串原型的举例 在字符串末尾追加字符串 String.prototype.append = function (str) { return this.concat(str);} 删除指定索 ...
- bootstrap思考一
bootstrap是一种热门的Web前端流行框架,如果要兼容PC端.手机端和响应式布局,那他一定是我的首选.bootstrap内容很多,功能强大,其中最好入门也是很重要的就是他的栅格系统.他有四个典型 ...
- python运行逻辑
Python程序在解释器上执行分两个过程: 编译:如果Python进程在机器上拥有写入权限,那么它会把程序的字节码保存为一个以 .pyc 为扩展名的文件.当程序运行后,会在源代码的同一个目录下看到 . ...