0
点赞
收藏
分享

微信扫一扫

使用 YOLOv8 和 Streamlit 构建实时对象检测和跟踪应用程序:第 1 部分-介绍和设置

搬砖的小木匠 2023-07-24 阅读 73

一、拦截器简介

二、拦截器使用

2.1 控制器方法

package com.example.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class MyController1 {
    @RequestMapping ("/m1")
    public String m1(){
        System.out.println("控制器方法");
        return "result";
    }
}

2.2 编写拦截器类

package com.example.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Scanner;

public class MyInterceptor implements HandlerInterceptor {
    // 请求到达Controller前执行
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.print("请求到达Controller前\t");
        // 如果return false则无法到达Controller
        // 控制台输入决定是否进入Controller
        System.out.print("控制台输入决定是否进入Controller: ");
        Scanner scanner = new Scanner(System.in);
        boolean flag;
        flag = scanner.nextBoolean();
        return flag;
    }

    // 跳转JSP前执行,此时可以向Request域添加数据
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.print("跳转JSP前\t");
        /*System.out.print("控制台输入决定是否添加数据: ");
        Scanner scanner = new Scanner(System.in);
        boolean flag;
        flag = scanner.nextBoolean();
        if(flag)*/
            request.setAttribute("name","HQX");
    }

    // 跳转JSP后执行,此时已经不能向Request域添加数据
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("跳转到JSP后");
        request.setAttribute("age",10);
    }
}

2.3 JSP页面

result.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>结果</title>
</head>
<body>
    <h3>name:${requestScope.name}</h3>
    <h3>age:${requestScope.age}</h3>
</body>
</html>

2.4 配置拦截器

<!-- 配置拦截器-->
<mvc:interceptors> 
  <mvc:interceptor>    
    <!-- 配置拦截器的作用路径-->   
    <mvc:mapping path="/**"/>    
    <!-- 拦截器对象 -->   
    <bean class="com.itbaizhan.interceptor.MyInterceptor"/> 
  </mvc:interceptor>
</mvc:interceptors>

2.5 测试结果

2.6 全局拦截器

三、拦截器链与执行顺序

3.1 拦截器2

package com.example.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Scanner;

public class MyInterceptor2 implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.print("拦截器2:请求到达Controller前\t");
        // 如果return false则无法到达Controller
        // 控制台输入决定是否进入Controller
        System.out.print("控制台输入决定是否进入Controller: ");
        Scanner scanner = new Scanner(System.in);
        boolean flag;
        flag = scanner.nextBoolean();
        return flag;
    }

    // 跳转JSP前执行,此时可以向Request域添加数据
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.print("拦截器2:跳转JSP前\t");
        /*System.out.print("控制台输入决定是否添加数据: ");
        Scanner scanner = new Scanner(System.in);
        boolean flag;
        flag = scanner.nextBoolean();
        if(flag)*/
            request.setAttribute("age","10");
    }

    // 跳转JSP后执行,此时已经不能向Request域添加数据
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器2:跳转到JSP后");
        request.setAttribute("age",10);
    }
}

3.2 配置拦截器链

    <!-- 配置拦截器-->
    <mvc:interceptors>
        <!-- 拦截器1 -->
        <mvc:interceptor>
            <!-- 配置拦截器的作用路径(没有该作用路径标签则是全局拦截器) -->
            <mvc:mapping path="/m1"/>
            <!-- 拦截器对象 -->
            <bean class="com.example.interceptor.MyInterceptor"/>
        </mvc:interceptor>
        <!-- 拦截器2 -->
        <mvc:interceptor>
            <!-- 配置拦截器的作用路径(没有该作用路径标签则是全局拦截器) -->
            <mvc:mapping path="/m1"/>
            <!-- 拦截器对象 -->
            <bean class="com.example.interceptor.MyInterceptor2"/>
        </mvc:interceptor>
        <!-- 全局拦截器 -->
        <bean class="com.example.interceptor.GlobalInterceptor"/>
    </mvc:interceptors>

3.3 测试结果

四、拦截器过滤敏感词案例

4.1  编写控制方法

    @RequestMapping("/m2")
    public String m2(Model model){
        model.addAttribute("name","大笨蛋");
        return "result";
    }

4.2 创建敏感词拦截器

package com.example.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;
import java.util.Set;

public class SensitiveWordInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        // 敏感词列表
        String[] sensitiveWords = {"坏人","暴力","笨蛋"};
        // model中所有数据

        if(modelAndView!=null) {
            Map<String, Object> model = modelAndView.getModel();
            Set<Map.Entry<String, Object>> entries = model.entrySet();

            // 遍历model
            for (Map.Entry<String, Object> entry : entries) {
                String key = entry.getKey();
                String value = entry.getValue().toString();
                // 将model值和敏感词列表遍历比对
                for (String sensitiveWord : sensitiveWords) {
                    // 如果model包含敏感词,则替换
                    if (value.contains(sensitiveWord)) {
                        String newStr = value.replaceAll(sensitiveWord, "***");
                        model.put(key, newStr);
                    }
                }
            }
        }
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    }
}

4.3 配置拦截器

    <!-- 敏感词拦截器 -->
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.example.interceptor.SensitiveWordInterceptor"/>
    </mvc:interceptor>

4.4 测试结果

五、跨域请求

5.1 同源策略

5.2 跨域请求

当前页面URL 被请求页面URL是否跨域原因
https://www.csdn.net/https://www.csdn.net/index.html
https://www.csdn.net/http://www.csdn.net/index.html跨域协议不同
http://www.csdn.com/http://www.baidu.com/跨域主域名不同
http://csdn.csdn.net/http://www.csdn.net/跨域子域名不同
http://www.csdn.net:8080http://www.csdn.net:8081跨域端口号不同

5.3 控制器接收跨域请求

控制器方法

    @RequestMapping("/m3")
    @ResponseBody
    @CrossOrigin("http://localhost:8080")
    public String m3(){
        System.out.println("测试跨域请求");
        return "success";
    }

编写JSP页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>跨域请求</title>
    <script src="js/jquery-2.1.1.min.js"></script>
    <script>
        $(function (){
            $("#btn").click(function (){
                $.get("http://localhost:8080/m3",function (data){
                    console.log(data);
                })
                /*$.get("http://127.0.0.1:8080/m3",function (data){
                    console.log(data);
                })*/
            })
        })
    </script>
</head>
<body>
    <button id="btn" >异步请求</button>
</body>
</html>

测试结果 

​ 

往期专栏&文章相关导读 

1. Maven系列专栏文章

Maven系列专栏Maven工程开发
Maven聚合开发【实例详解---5555字】

2. Mybatis系列专栏文章

Mybatis系列专栏MyBatis入门配置
Mybatis入门案例【超详细】
MyBatis配置文件 —— 相关标签详解
Mybatis模糊查询——三种定义参数方法和聚合查询、主键回填
Mybatis动态SQL查询 --(附实战案例--8888个字--88质量分)
Mybatis分页查询——四种传参方式
Mybatis一级缓存和二级缓存(带测试方法)
Mybatis分解式查询
Mybatis关联查询【附实战案例】
MyBatis注解开发---实现增删查改和动态SQL
MyBatis注解开发---实现自定义映射关系和关联查询

3. Spring系列专栏文章

Spring系列专栏Spring IOC 入门简介【自定义容器实例】
IOC使用Spring实现附实例详解
Spring IOC之对象的创建方式、策略及销毁时机和生命周期且获取方式
Spring DI简介及依赖注入方式和依赖注入类型
Spring IOC相关注解运用——上篇
Spring IOC相关注解运用——下篇
Spring AOP简介及相关案例
注解、原生Spring、SchemaBased三种方式实现AOP【附详细案例】
Spring事务简介及相关案例
Spring 事务管理方案和事务管理器及事务控制的API
Spring 事务的相关配置、传播行为、隔离级别及注解配置声明式事务

4. Spring MVC系列专栏文章   

SpringMVC系列专栏Spring MVC简介附入门案例
Spring MVC各种参数获取及获取方式自定义类型转换器和编码过滤器
Spring MVC获取参数和自定义参数类型转换器及编码过滤器
Spring MVC处理响应附案例详解
Spring MVC相关注解运用 —— 上篇

Spring MVC相关注解运用 —— 中篇

Spring MVC相关注解运用 —— 下篇
Spring MVC多种情况下的文件上传
Spring MVC异步上传、跨服务器上传和文件下载
Spring MVC异常处理【单个控制异常处理器、全局异常处理器、自定义异常处理器】
Spring MVC拦截器和跨域请求
SSM整合案例【C站讲解最详细流程的案例】

  

举报

相关推荐

0 条评论