1、什么是拦截器

  Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理。例如通过拦截器可以进行权限验证、记录请求信息的日志、判断用户是否登录等。在SpringMVC中通过实现HandlerInterceptor接口实现自定义拦截器类。

2、 拦截器案例

(1)MyIntercept

package com.springmvc.intercept;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class MyIntercept implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("=========拦截器当中的handle方法=========");
return true;
} @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("=======在HandlerAdapter之后执行,在DispatcherServlet解析视图之前执行=====");
} @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("=========呈现之后调用=========");
}
}

代码实现

(2)拦截器配置spring-mvc.xml

<!--利用default-servlet放行资源-->
<mvc:default-servlet-handler/> <!--配置拦截器-->
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/my/**"/>
<bean class="com.springmvc.intercept.MyIntercept"></bean>
</mvc:interceptor>
</mvc:interceptors>

代码实现

(3)MyController

@Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/doFirst")
public String doFirst(){
System.out.println("=========控制器中的方法=========");
return "index";
}

代码实现

(4)控制台效果

3、Spring MVC的数据校验

 3.1 数据校验案例

(1)导入依赖

<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator</artifactId>
<version>5.4.1.Final</version>
</dependency>

代码实现

(2)validate.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>测试案例</title>
</head>
<body>
<form action="/my/validate" method="post">
编号:<input type="text" name="uid"/><br/>
姓名:<input type="text" name="uName"/><br/>
邮箱:<input type="text" name="email"/><br/>
电话:<input type="text" name="phone"/><br/>
身份证号:<input type="text" name="userCode"/><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>

代码实现

(3)实体类UserInfo

package com.springmvc.entity;

import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.Length; import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern; public class UserInfo { @NotNull(message="编号不能为空")
private Integer uid; @NotNull
@Length(min = 2,max = 8,message = "用户名不能少于2位或大于8位")
private String uName; @Email(message = "邮箱格式不正确")
private String email; @Pattern(regexp = "/^1[3456789]\\d{9}$/",message = "手机号式不正确")
private String phone; @Pattern(regexp = "/(^\\d{15}$)|(^\\d{18}$)|(^\\d{17}(\\d|X|x)$)/",message = "身份证号格式不正确")
private String userCode; public Integer getUid() {
return uid;
} public void setUid(Integer uid) {
this.uid = uid;
} public String getuName() {
return uName;
} public void setuName(String uName) {
this.uName = uName;
} public String getEmail() {
return email;
} public void setEmail(String email) {
this.email = email;
} public String getPhone() {
return phone;
} public void setPhone(String phone) {
this.phone = phone;
} public String getUserCode() {
return userCode;
} public void setUserCode(String userCode) {
this.userCode = userCode;
}
}

代码实现

(4)MyController

package com.springmvc.controller;

import com.springmvc.entity.UserInfo;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.web.bind.annotation.RequestMapping; import javax.validation.Valid;
import java.util.List; @Controller
@RequestMapping("/my")
public class MyController {
@RequestMapping("/doFirst")
public String doFirst(){
System.out.println("=========控制器中的方法=========");
return "index";
} @RequestMapping("/validate")
public String Validate(@Valid UserInfo info, BindingResult bindingResult){
//如果有异常信息
if (bindingResult.hasErrors()){
//获取异常信息对象
List<ObjectError> allErrors = bindingResult.getAllErrors();
//将异常信息输出
for (ObjectError errors:allErrors) {
System.out.println(errors.getDefaultMessage());
}
}
return "index";
}
}

代码实现

(5)效果展示

SpringMVC拦截器和数据校验的更多相关文章

  1. SpringMVC的拦截器和数据校验

    SpringMVC拦截器 什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以 ...

  2. 解决SpringMVC拦截器中Request数据只能读取一次的问题

    解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request ...

  3. Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...

  4. SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制

    SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...

  5. SpringMVC拦截器+Spring自定义注解实现权限验证

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  6. SpringMVC拦截器的使用

    SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...

  7. SpringMVC拦截器2(资源和权限管理)(作为补充说明)

    SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...

  8. SpringMVC拦截器Interceptor

    SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...

  9. 五 : springMVC拦截器

    springMVC拦截器的实现一般有两种方式 第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口 第二种方式是继承实现了HandlerInte ...

随机推荐

  1. C语言编程的一些小总结

    1. static:可用于定义静态局部变量 在局部变量前,加上关键字static,该变量就被定义成为一个静态局部变量. 举一个静态局部变量的例子: void fn() { static int n=1 ...

  2. (python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, 'Read timed out.')

    (python pip安装第三方库超时问题(raise ReadTimeoutErrorself._pool, None, ‘Read timed out.’)pip工具安装百度经验链接: pip安装 ...

  3. Java_foreach不能remove

    foreach 阿里巴巴java开发手册 [强制]不要在foreach循环里进行元素的remove/add操作.remove元素请使用Iterator方式,如果并发操作,需要对Iterator对象加锁 ...

  4. JS数组去掉某一个元素

    /**数组去掉某一个元素**/ Array.prototype.remove = function(val) { var index = this.indexOf(val); if (index &g ...

  5. 12. Go 语言文件处理

    Go 语言文件处理 本章我们将带领大家深入了解一下 Go语言中的文件处理,重点在于文件而非目录或者通用的文件系统,特别是如何读写标准格式(如 XML 和 JSON 格式)的文件以及自定义的纯文本和二进 ...

  6. sprintf函数 (字符格式化函数)

    sprintf函数 字符串格式化命令,主要功能是把格式化的数据写入某个字符串中. sprintf函数原型在<studio.h>中. sprintf( [指向输入格式化后的字符串的缓冲区的指 ...

  7. Css 设置固定表格头部,内容可滚动

      效果图:

  8. SQL查询语法30例

    学好SQL查询:无他,概手熟耳. 1. 基础表: 学生表: 老师表: 课程表: 成绩表: 2. 题目: 1.查询名字中含有"华"字的学生信息 select * from 学生 wh ...

  9. pandas.apply()函数

    1.介绍 apply函数是pandas里面所有函数中自由度最高的函数.该函数如下: DataFrame.apply(func, axis=0, broadcast=False, raw=False, ...

  10. Java描述设计模式(05):原型模式

    本文源码:GitHub·点这里 || GitEE·点这里 一.原型模式简介 1.基础概念 原型模式属于对象的创建模式.通过给出一个原型对象来指明所有创建的对象的类型,然后用复制这个原型对象的办法创建出 ...