• JSR303和拦截器


    目录

    一:JSR303

    1.简介

    2.JSR303服务端步骤

    3.实操 

    二:拦截器

    1.什么是拦截器

    2. 拦截器与过滤器的区别 

    3.拦截器的使用步骤

    4.实操

     5.效果图片

    三,案例:登录权限控制

    1.案例代码

    2.效果图 


    一:JSR303

    1.简介

    表单验证(客户端验证)

    JSR303是做服务端 参数校验

    NotNull:针对的是基本数据类型

    NotBlank:作用域字符串

    NotEmpty:作用于集合

    2.JSR303服务端步骤

    1.1导入pom依赖

    1.2在待校验的数据库列段对应的实体类属性打上校验标签,非空校验 

    1.3在controller层

    方法添加@valid注解配合前面的校验标签

    添加bindingResult,此对象包含了所有校验未通过的错误信息

    1.4可以将所有的错误信息一pom集合的方式保存,并且传递到前台页面展示

    3.实操 

    导入jar包依赖

    1. <!--做服务端参数校验 JSR303的jar包依赖-->
    2. <dependency>
    3. <groupId>org.hibernate</groupId>
    4. <artifactId>hibernate-validator</artifactId>
    5. <version>6.0.7.Final</version>
    6. </dependency>

     clzEdit.jsp

    1. <%--<form action="${pageContext.request.contextPath }/clz/${empty b ? 'add' : 'edit'}" method="post">--%>
    2. <form action="${pageContext.request.contextPath }/clz/${empty b ? 'valiAdd' : 'edit'}" method="post">
    3. cid:<input type="text" name="cid" value="${b.cid }"><span style="color: blue">${msg.cid}</span><br>
    4. cname:<input type="text" name="cname" value="${b.cname }"><span style="color: blue">${msg.cname}</span><br>
    5. cteacher:<input type="text" name="cteacher" value="${b.cteacher }"><span style="color: blue">${msg.cteacher}</span><br>
    6. <input type="submit">
    7. </form>

    HelloController.java 

    1. package com.zhoujuan.ssm.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. /**
    5. * @author zhuojuan
    6. * @site www.zhoujuan.com
    7. * @company 玉渊工作室
    8. * @create  2022-08-19 17:07
    9. */
    10. @Controller
    11. public class HelloController {
    12. @RequestMapping("hello")
    13. public String hello(){
    14. System.out.println("进入业务方法。。。。。");
    15. return "index" ;
    16. }
    17. }

     Clazz.java

    1. /**
    2. * @NotNull :作用于基本数据类型
    3. * @NotEmpty :作用于集合
    4. * @NotBlank :作用于字符串
    5. */
    6. public class Clazz {
    7. @NotNull(message = "cid不能为空")
    8. protected Integer cid;
    9. @NotBlank(message = "班级名称不能为空")
    10. protected String cname;
    11. @NotBlank(message = "教员老师不能为空")
    12. protected String cteacher;
    13. protected String pic;

     ClzzController.java

    1. /**
    2. * @Valid 是与实体类中服务端校验 注解配合使用的
    3. * BindingResult 存放了所有违背校验的错误信息
    4. * @param clazz
    5. * @param bindingResult
    6. * @return
    7. */
    8. @RequestMapping("/valiAdd")
    9. public String valiAdd(@Valid Clazz clazz, BindingResult bindingResult,HttpServletRequest request){
    10. if(bindingResult.hasErrors()){
    11. Map msg = new HashMap();
    12. // 违背了规则
    13. List<FieldError> fieldErrors =bindingResult.getFieldErrors();
    14. for(FieldError fieldError : fieldErrors){
    15. // cid : cid不能为空
    16. System.out.println(fieldError.getField() + ":" + fieldError.getDefaultMessage());
    17. msg.put(fieldError.getField(),fieldError.getDefaultMessage());
    18. }
    19. request.setAttribute("msg",msg);
    20. // 如果出现了错误,应该将提示显示在 表单提交元素后方
    21. return "clzEdit";
    22. }else {
    23. this.classBiz.insertSelective(clazz);
    24. }
    25. return "redirect:/clz/list";
    26. }

    二:拦截器

    1.什么是拦截器

    SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

    2. 拦截器与过滤器的区别 

            过滤器(filter):

        1) filter属于Servlet技术,只要是web工程都可以使用
        2) filter主要对所有请求过滤
        3) filter的执行时机早于Interceptor

        拦截器(interceptor)

        1) interceptor属于SpringMVC技术,必须要有SpringMVC环境才可以使用
        2) interceptor通常对处理器Controller进行拦截
        3) interceptor只能拦截dispatcherServlet处理的请求
     

    3.拦截器的使用步骤

    3.1实现HandlerInterleptor接口,对应实现三个方法

    3.2完成SpringMVC_xml配置

    4.实操

     HandlerInterleptor.java

    1. package com.zhoujuan.ssm.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. /**
    5. * @author zhuojuan
    6. * @site www.zhoujuan.com
    7. * @company 玉渊工作室
    8. * @create  2022-08-19 17:07
    9. */
    10. @Controller
    11. public class HelloController {
    12. @RequestMapping("hello")
    13. public String hello(){
    14. System.out.println("进入业务方法。。。。。");
    15. return "index" ;
    16. }
    17. }

     springmvc_xml配置

    1. <mvc:interceptors>
    2. <mvc:interceptor>
    3. <mvc:mapping path="/**"/>
    4. <bean class="com.zhoujuan.ssm.intercept.OnehandlerInterceptor">bean>
    5. mvc:interceptor>
    6. <mvc:interceptor>
    7. <mvc:mapping path="/clz/**"/>
    8. <bean class="com.zhoujuan.ssm.intercept.TowhandlerInterceptor">bean>
    9. mvc:interceptor>
    10. mvc:interceptors>
    11. beans>

     OnehandlerInterceptor.java

    1. package com.zhoujuan.ssm.intercept;
    2. import org.springframework.web.servlet.HandlerInterceptor;
    3. import org.springframework.web.servlet.ModelAndView;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. /**
    7. * @author zhuojuan
    8. * @site www.zhoujuan.com
    9. * @company 玉渊工作室
    10. * @create  2022-08-19 16:51
    11. */
    12. public class OnehandlerInterceptor implements HandlerInterceptor {
    13. @Override
    14. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    15. // 预处理
    16. System.out.println("[OnehandlerInterceptor] . preHandle");
    17. // 如果login/logout 这个请求 就直接放行
    18. String url = request.getRequestURL().toString();
    19. if(url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
    20. return true;
    21. }
    22. // 对于请求业务方法,只有登录过也就是存在session数据,才能访问
    23. String uname =(String) request.getSession().getAttribute("uname");
    24. if (uname == null || "".equals(uname)){
    25. response.sendRedirect("/login.jsp");
    26. return false;
    27. }
    28. return true;
    29. }
    30. @Override
    31. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    32. // 后处理
    33. System.out.println("[OnehandlerInterceptor] . preHandle");
    34. }
    35. @Override
    36. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    37. // 完成后执行
    38. System.out.println("[OnehandlerInterceptor] . preHandle");
    39. }
    40. }

    TowhandlerInterceptor .java

    1. package com.zhoujuan.ssm.intercept;
    2. import org.springframework.web.servlet.HandlerInterceptor;
    3. import org.springframework.web.servlet.ModelAndView;
    4. import javax.servlet.http.HttpServletRequest;
    5. import javax.servlet.http.HttpServletResponse;
    6. /**
    7. * @author zhuojuan
    8. * @site www.zhoujuan.com
    9. * @company 玉渊工作室
    10. * @create  2022-08-19 16:51
    11. */
    12. public class TowhandlerInterceptor implements HandlerInterceptor {
    13. @Override
    14. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    15. // 预处理
    16. System.out.println("[OnehandlerInterceptor] . preHandle");
    17. return true;
    18. }
    19. @Override
    20. public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    21. // 后处理
    22. System.out.println("[OnehandlerInterceptor] . preHandle");
    23. }
    24. @Override
    25. public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    26. // 完成后执行
    27. System.out.println("[OnehandlerInterceptor] . preHandle");
    28. }
    29. }

     5.效果图片

     

     

    三,案例:登录权限控制

    1.案例代码

    LoginContoller.java

    1. package com.zhoujuan.ssm.controller;
    2. import org.springframework.stereotype.Controller;
    3. import org.springframework.web.bind.annotation.RequestMapping;
    4. import javax.servlet.http.HttpServletRequest;
    5. /**
    6. * @author zhuojuan
    7. * @site www.zhoujuan.com
    8. * @company 玉渊工作室
    9. * @create  2022-08-19 17:58
    10. */
    11. @Controller
    12. public class LoginContorller {
    13. @RequestMapping("/login")
    14. public String login(HttpServletRequest request){
    15. // 登录成功 需要 保存 用户信息
    16. String uname= request.getParameter("uname");
    17. if("zhangsan".equals(uname)){
    18. request.getSession().setAttribute("uname",uname);
    19. }
    20. return "index";
    21. }
    22. @RequestMapping("/logout")
    23. public String logout(HttpServletRequest request){
    24. request.getSession().invalidate();
    25. return "index";
    26. }
    27. }

    跳转登录界面index.jsp

    1. <%--
    2. Created by IntelliJ IDEA.
    3. User: zjjt
    4. Date: 2022-8-19
    5. Time: 18:31
    6. To change this template use File | Settings | File Templates.
    7. --%>
    8. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    9. <html>
    10. <head>
    11. <title>Title</title>
    12. </head>
    13. <body>
    14. 登录界面
    15. </body>
    16. </html>

      OnehandlerInterceptor.java

    1. @Override
    2. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    3. // 预处理
    4. System.out.println("[OnehandlerInterceptor] . preHandle");
    5. // 如果login/logout 这个请求 就直接放行
    6. String url = request.getRequestURL().toString();
    7. if(url.indexOf("/login") > 0 || url.indexOf("/logout") > 0){
    8. return true;
    9. }
    10. // 对于请求业务方法,只有登录过也就是存在session数据,才能访问
    11. String uname =(String) request.getSession().getAttribute("uname");
    12. if (uname == null || "".equals(uname)){
    13. response.sendRedirect("/login.jsp");
    14. return false;
    15. }
    16. return true;
    17. }

    2.效果图 

     

     

  • 相关阅读:
    生草也叫草生
    计算机毕业设计ssm软件项目Bug管理系统612ed系统+程序+源码+lw+远程部署
    ffmpeg的部署踩坑及简单使用方式
    ElasticSearch之Quick.ElasticSearch.Furion组件的使用
    将YOLO数据集按照指定比例划分(训练集、验证集、测试集)的详细教程
    【Spring Boot 源码学习】OnClassCondition 详解
    Linux之Shell编程快速上手
    【性能测试】慢查询日志分析-实战篇
    Ventoy系统启动盘制作
    计算机毕业设计之java+ssm的鲜活农产品销售系统
  • 原文地址:https://blog.csdn.net/m0_67864917/article/details/126431256