南宁美丽南方官方网站建设意见,网站开始怎么做的,5网站开发,郑州企业建站网站【SpringMVC】拦截器JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权… 【SpringMVC】拦截器JSR303的使用 1.1 什么是JSR3031.2 为什么使用JSR3031.3 常用注解1.4 Validated与Valid区别1.5 JSR快速入门1.5.2 配置校验规则# 1.5.3 入门案例二、拦截器2.1 什么是拦截器2.2 拦截器与过滤器2.3 应用场景2.4 拦截器快速入门2.5.拦截器链2.6登录案列权限控制 1.1 什么是JSR303
JSR303是Java规范中定义的一套用于数据校验的标准也被称为Bean Validation。它提供了一组注解用于验证Java对象的属性值是否满足特定的约束条件。
1.2 为什么使用JSR303
使用JSR303可以在服务器端对用户提交的数据进行验证确保数据的合法性和有效性。它可以减少开发人员编写大量的校验逻辑代码提高开发效率并且可以在不同层次如控制器、服务层、DAO进行数据验证保证数据的一致性。
1.3 常用注解
常见的JSR303注解包括
NotNull验证对象不为null。 NotEmpty验证字符串、集合、数组不为空。 NotBlank验证字符串不为空并且长度必须大于0。 Size验证字符串、集合、数组的长度范围。 Min验证数字的最小值。 Max验证数字的最大值。 Pattern验证字符串是否匹配指定的正则表达式。
1.4 Validated与Valid区别
Valid是Java标准的注解用于触发对被注解对象的校验。它可以直接放在方法参数上或者作为Spring MVC中处理请求体参数校验的一部分。 Validated是Spring框架提供的注解与Valid类似但功能更加强大。它可以用于类、方法和方法参数级别的校验并且支持分组校验等高级特性。
1.5 JSR快速入门
1.5.1 导入依赖 在Maven项目中需要导入javax.validation相关的依赖。
!-- JSR303 --
hibernate.validator.version6.0.7.Final/hibernate.validator.version!-- JSR303 --
dependencygroupIdorg.hibernate/groupIdartifactIdhibernate-validator/artifactIdversion${hibernate.validator.version}/version
/dependency1.5.2 配置校验规则
通过在实体类的字段上添加不同的JSR303注解定义校验规则。
在这里插入package com.niyin.biz.impl;import com.niyin.biz.tyBiz;
import com.niyin.mapper.tyMapper;
import com.niyin.model.ty;
import com.niyin.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;import java.util.List;
import java.util.Map;Service
public class tyBizImpl implements tyBiz {Autowiredprivate tyMapper tyMapper;Overridepublic int deleteByPrimaryKey(Integer tid) {return tyMapper.deleteByPrimaryKey(tid);}Overridepublic int insert(ty record) {return tyMapper.insert(record);}Overridepublic int insertSelective(ty record) {return tyMapper.insertSelective(record);}Overridepublic ty selectByPrimaryKey(Integer tid) {return tyMapper.selectByPrimaryKey(tid);}Overridepublic int updateByPrimaryKeySelective(ty record) {return tyMapper.updateByPrimaryKeySelective(record);}Overridepublic int updateByPrimaryKey(ty record) {return tyMapper.updateByPrimaryKey(record);}Overridepublic Listty selectByPager(ty t, PageBean pageBean) {return tyMapper.selectByPager(t);}
}
# 1.5.3 入门案例
在控制器中接收用户提交的数据并使用Validated注解进行数据校验。如果校验失败则返回错误信息给客户端。 RequestMapping(/valiAdd)public String valiAdd(Validated ty t, BindingResult result, HttpServletRequest req){
// 如果服务端验证不通过有错误if(result.hasErrors()){
// 服务端验证了实体类的多个属性多个属性都没有验证通过ListFieldError fieldErrors result.getFieldErrors();MapString,Object map new HashMap();for (FieldError fieldError : fieldErrors) {
// 将多个属性的验证失败信息输送到控制台System.out.println(fieldError.getField() : fieldError.getDefaultMessage());map.put(fieldError.getField(),fieldError.getDefaultMessage());}req.setAttribute(errorMap,map);}else {this.tyBiz.insertSelective(t);return redirect:list;}return edit;}% page languagejava contentTypetext/html; charsetUTF-8pageEncodingUTF-8%
!DOCTYPE html PUBLIC -//W3C//DTD HTML 4.01 Transitional//EN http://www.w3.org/TR/html4/loose.dtd
html
headmeta http-equivContent-Type contenttext/html; charsetUTF-8title博客的编辑界面/title
/head
body
form action${pageContext.request.contextPath }/clz/${empty ts ? valiAdd : edit} methodpostid:input typetext nametid value${ts.tid }span stylecolor: red;${errorMap.tid}/spanbrbname:input typetext nametname value${ts.tname }span stylecolor: red;${errorMap.tname}/spanbrprice:input typetext nametprice value${ts.tprice }span stylecolor: red;${errorMap.tprice}/spanbrinput typesubmit
/form
/body
/html 二、拦截器
2.1 什么是拦截器
拦截器Interceptor是在Web应用程序中常用的一种技术用于在请求被处理前后进行拦截和处理。它可以在控制器和处理器之间进行预处理和后处理操作。
2.2 拦截器与过滤器
拦截器和过滤器都可以用于对请求进行处理但它们在使用方式和功能上有一些区别。过滤器是基于Servlet规范的可以对所有请求进行处理而拦截器是基于Spring MVC框架的只能对包含了拦截器配置的请求进行处理。
2.3 应用场景
拦截器可以应用在各种场景下常见的使用场景包括权限验证、日志记录、异常处理、缓存处理等。它可以对请求进行统一处理简化开发流程并提高代码的可维护性和重用性。
2.4 拦截器快速入门
2.4.1 入门案例
package com.niyin.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class OneInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【OneInterceptor】preHandle...);return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(【OneInterceptor】postHandle...);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(【OneInterceptor】afterCompletion...);}
}spring_mvc配置拦截器器 mvc:interceptors--bean classcom.niyin.interceptor.OneInterceptor/bean/mvc:interceptors--结论拦截器会根据preHandle()方法返回值进行拦截判断返回了一个true值。这个返回值表示该拦截器已经处理了当前的请求并且可以继续向下传递请求。如果返回false则表示该拦截器不处理当前请求请求将被终止。
2.5.拦截器链
如果多个拦截器能够对相同的请求进行拦截则多个拦截器会形成一个拦截器链主要理解拦截器链中各个拦截器的执行顺序。拦截器链中多个拦截器的执行顺序根拦截器的配置顺序有关先配置的先执行。 案例
package com.niyin.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class TwoInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【TwoInterceptor】preHandle...);return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(【TwoInterceptor】postHandle...);}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(【TwoInterceptor】afterCompletion...);}
}spring_mvc mvc:interceptors!--2) 多拦截器拦截器链--mvc:interceptormvc:mapping path/**/bean classcom.niyin.interceptor.OneInterceptor//mvc:interceptormvc:interceptormvc:mapping path/clz/**/bean classcom.niyin.interceptor.TwoInterceptor//mvc:interceptor/mvc:interceptors2.6登录案列权限控制
package com.niyin.web;import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;Controller
public class LoginController {RequestMapping(/login)public String login(HttpServletRequest req){String uname req.getParameter(uname);HttpSession session req.getSession();if (zs.equals(uname)){session.setAttribute(uname,uname);}return redirect:/clz/list;}RequestMapping(/logout)public String logout(HttpServletRequest req){req.getSession().invalidate();return redirect:/clz/list;}
}package com.niyin.interceptor;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;public class LoginInterceptor implements HandlerInterceptor {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(【implements】preHandle...);StringBuffer url request.getRequestURL();if (url.indexOf(/login) 0 || url.indexOf(/logout) 0){// 如果是 登录、退出 中的一种return true;}
// 代表不是登录也不是退出
// 除了登录、退出其他操作都需要判断是否 session 登录成功过String uname (String) request.getSession().getAttribute(uname);if (uname null || .equals(uname)){response.sendRedirect(/page/login);return false;}return true;}Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {}Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {}
}Sping_mvc
mvc:interceptorsbean classcom.niyin.interceptor.LoginInterceptor/bean/mvc:interceptorsjsp
%--Created by IntelliJ IDEA.User: 林墨Date: 2023/9/12Time: 23:14To change this template use File | Settings | File Templates.
--%
% page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitle登录界面/title
/head
body
form action/login methodpost用户input nameunameinput typesubmit/form
/body
/html