交给/login的post请求的控制器处理,  并通过控制器的逻辑控制获取提示信息
login.jsp
<%--
Created by IntelliJ IDEA.
User: shijinglu
Date: 2019/2/3
Time: 18:57
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>用户登录</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/login" method="post">
用户名:<input name="username"><br>
密&nbsp;&nbsp;码:<input type="password" name="password">${msg} </br>
<input type="submit" value="登录">
</form> </body>
</html>

实体类:User.java

package com.sjl.po;
/**
* 用户POJO类
* */
public class User {
private Integer id;
private String username;
private String password; public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getUsername() {
return username;
} public void setUsername(String username) {
this.username = username;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
}
}

登录之前的拦截器的设置(也是一个session验证):

package com.sjl.interceptor;

import com.sjl.po.User;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; public class LoginInterceptor implements HandlerInterceptor {
/**
* preHandle():在控制器之前执行,如果返回为true,则放行,返回为false,
* 则不往下执行。
*
* s1:获取地址栏上的uri,并赋值给url,用getRequestURI();
* s2:如果url这个整体大于等于0则表示存在,此时返回true,并继续放行;
* s3:通过控制器绑定的session对象,来获取session对象,然后通过session
* 进一步获取session的值,如果能够获取到,不为空,则表示该对象存在,用户
* 之前登录过的,否则没有登录过的,则在前端页面用request传值,并给出提示
* 信息。
* */
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object o) throws Exception {
//获取请求的URL 方法getRequestURI 获取地址栏上的除了
// localhost:8080的其余的全部
String url=request.getRequestURI();
System.out.println("url:"+url);
//URL:除了login.jsp是可以公开的,其它的URL都进行拦截控制
if (url.indexOf("/login")>=0){
return true;
} //获取session中用户的信息,如果session已经存在,则表示该用户已经存在,
// 曾经登录过,也放行 否则重新转发到登录页面,不再后续执行
HttpSession session=request.getSession(); User user=(User)session.getAttribute("USER_SESSION");
System.out.println("user:"+user); //判断是否有用户数据,如果有,则返回true,继续向下执行
if (user!=null){
return true;
} //不符合条件的给出提示信息,并转发到登录页面
request.setAttribute("msg","您还没有登录,请先登录!");
request.getRequestDispatcher("/WEB-INF/view/login.jsp").forward(request,response);
//这里直接用return终止了,因为该用户未登录
return false;
} @Override
public void postHandle(HttpServletRequest request,
HttpServletResponse response,
Object o,
ModelAndView modelAndView) throws Exception { } @Override
public void afterCompletion(HttpServletRequest request,
HttpServletResponse response,
Object o,
Exception e) throws Exception { }
}
  说明:request.setAttribute("msg","您还没有登录,请先登录!");这种方式可以传值,即用request传递并绑定值,在前端页面login.jsp用${msg}取值,
这种方法是用的el表达式。

UserController.java

package com.sjl.Controller;

import com.sjl.po.User;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**注意get/post的使用的区别,通过地址栏来看*/
import javax.servlet.http.HttpSession;
@Controller
public class UserController {
/**
* 向登录页面跳转
* */
@RequestMapping(value = "/login",method = RequestMethod.GET)
public String toLogin(){
return "login";
} /**
* 用户登录
* */
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String login(User user, Model model, HttpSession session){
//这个是Spring下的Model org.springframework.ui.Model String username=user.getUsername();
String password=user.getPassword(); //此处模拟从数据库中获取用户名和密码后进行判断 如果是数字是不是用== //明明输入的是数字,int型,可这里为什么是String型
if (username!=null && username.equals("焦婷") && password !=null && password.equals("123456")){
//把对象添加到Session
session.setAttribute("USER_SESSION",user);
//重定向到主页面的跳转方法
return "redirect:main";
}
//绑定并返回一个值
model.addAttribute("msg","用户名或密码错误,请重新登录!");
return "login";
} /**
* 向用户主页跳转
* */
@RequestMapping(value = "/main")
public String toMain(){
return "main";
} /**
* 退出登录
* */
@RequestMapping("/logout")
public String logout(HttpSession session){
//清除Session
session.invalidate();
//重定向到登录页面的跳转方法
return "redirect:login";
}
}
  session.setAttribute("USER_SESSION",user);这里是用session来绑定值,并在前端页面main.jsp用${USER_SESSION.username};

main.jsp(#用来获取控制器发送过来的值, 并增加一个超链接,而这个请求交给控制器处理,交给logout处理)

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>系统主页</title>
</head>
<body>
当前用户是${USER_SESSION.username}<br/>
<a href="${pageContext.request.contextPath}/logout">
点我退出</a>
</body>
</html>

说明:其实这里面把数据库的内容省略了,只是一个模拟登录。

SpringMVC登录拦截DEMO的更多相关文章

  1. SpringMVC登录拦截器

    springmvc拦截器的配置.使用:1.自定义拦截器,实现HandlerInterceptor接口. package com.bybo.aca.web.interceptor; import jav ...

  2. springmvc登录拦截jsp页面

    web.xml配置 <filter> <filter-name>LoginFilter</filter-name> //编写拦截的类的全类名 <filter- ...

  3. Spring-mvc登录方法及JSP的拦截

    添加登录拦截器:LoginInterceptor import javax.servlet.http.HttpServletRequest; import javax.servlet.http.Htt ...

  4. 在springMVC中使用自定义注解来进行登录拦截控制

    1:java注解使用是相当频繁,特别是在搭建一些框架时,用到类的反射获取方法和属性,用的尤其多. java中元注解有四个: @Retention     @Target     @Document  ...

  5. springboot+springmvc拦截器做登录拦截

    springboot+springmvc拦截器做登录拦截 LoginInterceptor 实现 HandlerInterceptor 接口,自定义拦截器处理方法 LoginConfiguration ...

  6. springMvc实现拦截特定请求判断用户是否登录

    流程: 新建一个拦截器,配置拦截哪些,放行哪些 在spring servrt中配置拦截器 <!--配置拦截器--> <mvc:interceptors> <!--登录拦截 ...

  7. SpringMVC 使用注解完成登录拦截

    目录 为了实现用户登录拦截你是否写过如下代码呢? 1. 基于Filter 2. 基于Struts 3. 基于SpringMVC 如何使用自定义注解完成自定义拦截呢? 登录注解 SpringMVC 拦截 ...

  8. springMvc基于注解登录拦截器

    1.首先先定义一个拦截器注解 @Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) p ...

  9. SpringMVC利用拦截器防止SQL注入

    引言 随着互联网的发展,人们在享受互联网带来的便捷的服务的时候,也面临着个人的隐私泄漏的问题.小到一个拥有用户系统的小型论坛,大到各个大型的银行机构,互联网安全问题都显得格外重要.而这些网站的背后,则 ...

随机推荐

  1. iOS - UITableView reloadData滚动到顶部无效问题解决

    //tableView:动态cell的高度不固定,滑动不到最顶部 //if (self.sensorDate.count > 0) { // [self.tableView scrollToRo ...

  2. python 接口自动化测试二(request.get)

    环境搭建好后,接下来我们先来了解一下requests的一些简单使用,主要包括: requests常用请求方法使用,包括:get,post requests库中的Session.Cookie的使用 其它 ...

  3. 用 ArrayList 集合调用商品类

    public class  Commodity{ //定义商品类 String name; //定义商品名字 double  size;  //定义商品尺寸 double  price; //定义商品 ...

  4. vim正则表达式

    目录 一.使用正则表达式的命令[/,?, s, g] 1. 搜索命令 2. 替换命令s 3. global 命令形式 二.正则表达式的用法 表示位置的符号 表示数量的元字符 元字符一览 方括号内的特殊 ...

  5. Cesium调用 WMS 、WMTS 服务

    参考文章地址:Cesium调用 ArcGIS Sever 以及 GeoSever 发布的地图服务 cesium测试示例(包括官方的示例)中   arcgis服务都无法访问了 根据原文找到一个在线的可访 ...

  6. TP框架中分页类的使用

    public function test(){ $m=M('Message'); import('ORG.Util.Page');// 导入分页类 $count = $m->count();// ...

  7. 20165330 2017-2018-2 《Java程序设计》第7周学习总结

    课本知识总结 第十一章 JDBC与MySQL数据库 安装XAMPP软件及启动MySQL 下载链接:XAMPP 安装步骤:参考教程xampp新手学习指引(windows示例) 启动MySQL:打开系统c ...

  8. python基础(2)-运算符&while循环

    算术运算符 a=5; b=2; print(a+b);#result:7 desc:加 print(a-b);#result:3 desc:减 print(a*b);#result:10 desc:乘 ...

  9. Excel编辑栏字体显示大小

    文件-> 选项-> 常规与保存-> 标准字体-> 确定 关闭文件,重启生效

  10. selenium 淘宝登入反爬虫解决方案(亲测有效)

    前言 目前在对淘宝进行数据爬取的时候都会碰到,登入时的滑块问题,无论是手动还是脚本都不成功.这里的很重要一个原因是很多的网站都对selenium做了反爬虫机制.接下来是笔者参考网上的网友们的方法亲自测 ...