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 ...
随机推荐
- 基于三层架构的增删改查Get知识点
给DataGridView控件绑定datatable数据源之后总是会多一行,在属性里修改属性allowuserToaddrow值为false即可 不可编辑状态是设置成只读状态即可,英文属性readon ...
- SpringCloud Config服务端
1.导入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId> ...
- 谈谈.NET Core中基于Generic Host来实现后台任务
目录 前言 什么是Generic Host 后台任务示例 控制台形式 消费MQ消息的后台任务 Web形式 部署 IHostedService和BackgroundService的区别 IHostBui ...
- java内部类深入详解 内部类的分类 特点 定义方式 使用
本文关键词: java内部类 内部类的分类 特点 定义方式 使用 外部类调用内部类 多层嵌套内部类 内部类访问外部类属性 接口中的内部类 内部类的继承 内部类的覆盖 局部内部类 成员内 ...
- 使用codis-admin搭建codis集群
目的 在Redis Codis 部署安装的文章中,介绍了通过fe在web上搭建codis的基本步骤和方法,也介绍了codis-admin的相关说明,为了更好的熟悉codis-admin的使用,本文将使 ...
- Java的几个基本类型之间的相互转换
前言: 转载申明: 作者:王蒙 链接:http://matt33.com/2015/10/27/TheTransformOfJava/ 之前在写java程序的时候,经常会遇到很多的需要需要转换基础数据 ...
- 【.NET Core项目实战-统一认证平台】第八章 授权篇-IdentityServer4源码分析
[.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章我介绍了如何在网关上实现客户端自定义限流功能,基本完成了关于网关的一些自定义扩展需求,后面几篇将介绍基于IdentityServer ...
- 学JAVA第七天,循环深入了解
因为星期五放假,所以今天补回. 上次已经解释过循环了,现在我们来进一步了解. 例如for循环:for( int i=0 : i<10 : i++ ){需要循环的内容},这样就会循环10次了 如果 ...
- 轻松理解 Java HashMap 和 ConcurrentHashMap
前言 Map 这样的 Key Value 在软件开发中是非常经典的结构,常用于在内存中存放数据. 本篇主要想讨论 ConcurrentHashMap 这样一个并发容器,在正式开始之前我觉得有必要谈谈 ...
- OO第一单元作业总结
oo第一单元的作业是对多项式的求导.下面就是对三次作业分别进行分析. 第一次作业 分析 第一次作业相对来讲比较简单,甚至不用面向对象的思想都能十分轻松的完成(实际上自己就没有使用),包含的内容只有常数 ...