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 ...
随机推荐
- Asp.Net MVC路由生成URL过程
这次谈一谈Asp.Net MVC中所学到的路由生成URL的相关技术,顺便提一提遇到的一些坑,真的是掉坑掉多了,也就习以为常了,大不了从坑里再爬出来.初学者,包括我,都以为,mvc的核心是模型视图控制器 ...
- 补习系列(10)-springboot 之配置读取
目录 简介 一.配置样例 二.如何注入配置 1. 缺省配置文件 2. 使用注解 3. 启动参数 还有.. 三.如何读取配置 @Value 注解 Environment 接口 @Configuratio ...
- 权限管理系统之LayUI实现页面增删改查和弹出层交互
由于对LayUI框架不太熟悉,昨天抽空看了下LayUI的文档,今天在网上找了使用LayUI进行增删改查相关内容,自己照葫芦画了个瓢,画瓢部分不是很难,主要是下午遇到了一个弹出层的问题耗时比较久. 同一 ...
- 解读经典《C#高级编程》泛型 页114-122.章4
前言 本章节开始讲解泛型..Net从2.0开始支持泛型,泛型不仅是C#的一部分,也与IL代码紧密集成.所以C#中泛型的实现非常优雅.相对于C#,Java是后期引入的泛型,受限于最初的设计架构,就实现的 ...
- [心得] 如何利用liquibase進行資料庫版本控制 - 實際練習
透過上一篇的基本觀念介紹,希望大家應該有一點點感覺了! 這篇我們就來做個簡單的版本演練,加深印象吧! 我使用的環境如下 System : Windows 7 Database : SQL Server ...
- Java Pom.xml 详解
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Oracle day04 DML_事务_序列_视图_数据类型_DDL
DMLinsert关键字作用:往表中插入一条(多条)数据 语法1:元祖值式的插入语法1: insert into tablename(column1,column2,...,columnN) valu ...
- Apollo配置中心源码分析
Apollo配置中心源码分析 1. apollo的核心代码分享 SpringApplication启动的关键步骤 在SpringApplication中,会加载所有实现了Init方法的类 protec ...
- 微信公众平台设置URL和Token接收接口事件推送
最近做对接微信闪开发票-微信发票名片,里面有个接收用户提交抬头接口是微信推送事件到公众号后台,该事件将发送至开发者填写的URL(登录公众平台进入[开发者中心设置]). 开发者可通过事件推送完成数据统计 ...
- Mybaits之Mapper动态代理开发
Mybaits之Mapper动态代理开发 开发规范: Mapper接口开发方法只需要程序员与Mapper接口(相当于Dao接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法 ...