SpringMVC拦截器和数据校验
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拦截器和数据校验的更多相关文章
- SpringMVC的拦截器和数据校验
SpringMVC拦截器 什么是拦截器:Spring MVC中的拦截器(Interceptor)类似于Servlet中的过滤器(Filter),它主要用于拦截用户请求并作相应的处理.例如通过拦截器可以 ...
- 解决SpringMVC拦截器中Request数据只能读取一次的问题
解决SpringMVC拦截器中Request数据只能读取一次的问题 开发项目中,经常会直接在request中取数据,如Json数据,也经常用到@RequestBody注解,也可以直接通过request ...
- Spring+SpringMVC+MyBatis深入学习及搭建(十七)——SpringMVC拦截器
转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7098753.html 前面讲到:Spring+SpringMVC+MyBatis深入学习及搭建(十六)--S ...
- SpringMVC之八:基于SpringMVC拦截器和注解实现controller中访问权限控制
SpringMVC的拦截器HandlerInterceptorAdapter对应提供了三个preHandle,postHandle,afterCompletion方法. preHandle在业务处理器 ...
- SpringMVC拦截器+Spring自定义注解实现权限验证
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- SpringMVC拦截器的使用
SpringMVC 中的Interceptor 拦截器也是相当重要和相当有用的,它的主要作用是拦截用户的请求并进行相应的处理.比如通过它来进行权限验证,或者是来判断用户是否登陆,或者是像12306 那 ...
- SpringMVC拦截器2(资源和权限管理)(作为补充说明)
SpringMVC拦截器(资源和权限管理) 1.DispatcherServlet SpringMVC具有统一的入口DispatcherServlet,所有的请求都通过DispatcherServle ...
- SpringMVC拦截器Interceptor
SpringMVC拦截器(Interceptor)实现对每一个请求处理前后进行相关的业务处理,类似与servlet中的Filter. SpringMVC 中的Interceptor 拦截请求是通过Ha ...
- 五 : springMVC拦截器
springMVC拦截器的实现一般有两种方式 第一种方式是要定义的Interceptor类要实现了Spring的HandlerInterceptor 接口 第二种方式是继承实现了HandlerInte ...
随机推荐
- solo升级以及自动化更新的方法
使用solo过程总涉及到更新问题,所以就在这里把solo更新的方法总结一下.希望能给小伙伴们一些帮助.如何选择更新方法主要是跟你的部署方式有关,如果你是通过 docker方式进行部署,那么你可以还可以 ...
- 轻松定位CPU飙高问题
以下四步轻松定位CPU飙高问题: ①top pid 查看cpu耗CPU进程 ②top -Hp pid 查看该进程所有线程的运行情况,找到占用 CPU 过高的线程 pid ③ printf %x pid ...
- LeetCode刷题191124
博主渣渣一枚,刷刷leetcode给自己瞅瞅,大神们由更好方法还望不吝赐教.题目及解法来自于力扣(LeetCode),传送门. 算法: 给出一个无重叠的 ,按照区间起始端点排序的区间列表. 在列表中插 ...
- 工具-Xmind常用快捷键/使用
1-快捷键 Ctrl+Shift+L 快捷键助手 Ctrl+Home 返回中心主题 Ctrl+] 插入摘要 Ctrl+I 插入图片 Ctrl+Shift+H 插入超链接 Ctrl+1,2,3,4,5, ...
- linux 常用命令及软件
命令基于ubuntu 18.04 修改网卡配置 /etc/netplan/50-cloud-init.yaml #修改 netplan apply #应用修改 修改计算机名 sudo hostname ...
- 【使用篇二】SpringBoot集成SpringSecurity(22)
SpringSecurity是专门针对基于Spring项目的安全框架,充分利用了依赖注入和AOP来实现安全管控.在很多大型企业级系统中权限是最核心的部分,一个系统的好与坏全都在于权限管控是否灵活,是否 ...
- Redux Class(immutable Record)引入的必要性 && Navigation引入方式
我的意见 和大家讨论一下几个问题 1. 项目里面没有用class规定的请求数据结构,调试数据的时候无法从前端获取请求的数据格式,要看后端接口,增加了调试的难度.我们以前会用immutable Reco ...
- 《2019年小米春季上海 PHP 实习生招聘面试题》部分答案解析
1 丶 Nginx 怎么实现负载均衡 这个还是比较简单 1.轮询 这种是默认的策略,把每个请求按顺序逐一分配到不同的 server,如果 server 挂掉,能自动剔除. 2.最少连接 把请求分配到连 ...
- 使用DEV C++调试代码
0.序言 本片博客旨在记录通过DEV C++工具调试C/C++代码,在这之前需要对以下知识了解或掌握. C/C++代码的完整编译过程,可参考文章 GCC,gcc,g++,gdb的区别和联系,可参考文章 ...
- 分布式的cap原理
由来 1998年的加州大学的计算机科学家 Eric Brewer 提出,分布式有三个指标. Consistency,Availability,Partition tolerance. 简称即为CAP. ...