编写过滤器jar包并植入到项目中

2023-11-06

公司有项目有个需求,就是希望可以写一个统一的权限管理。每次开发新项目的时候,可以通过添加依赖包进行权限的获取、验证。

至于为什么不使用aop,拦截器二使用过滤器,是因为在java中,如果3者同事存在,最先执行的是过滤器。

一、新建第三方过滤器jar包的jarone项目

权限管理模块,我是直接创建了spring boot项目,主要是为了方便调试(打包的时候,我会把启动类注释掉)

以下是目录结构:

 编写ipFilter类:用于验证操作

public class ipFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("---->前");
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("---->后");
    }
}

 编写ipFilterInitializer类:目的是为了把过滤器注册到容器中

@Configuration
public class ipFilterInitializer implements ApplicationContextInitializer<ConfigurableApplicationContext> {
    @Override
    public void initialize(ConfigurableApplicationContext applicationContext) {
   
    }

    @Bean
    public FilterRegistrationBean<ipFilter> registrationIpBean(){
        FilterRegistrationBean<ipFilter> bean = new FilterRegistrationBean<ipFilter>();
        bean.setFilter(new ipFilter());
        bean.setName("ipFilter");
        bean.addUrlPatterns("/*");
        bean.setOrder(1);
        return bean;

    }

}

编写PagePermissionController类,为了验证用户是否可以请求到这个jar的api接口

@RestController
@RequestMapping("/PagePermission")
public class PagePermissionController {

    @GetMapping("/getButtons")
    public List<String> getButtons(){
        List<String> lstStr=new ArrayList<>();
        lstStr.add("lyy");
        lstStr.add("18");
        lstStr.add("coder");
        return lstStr;
    }
}

直接启动这个项目,是可以进入到ipFilter过滤器,并可以正常访问接口。

接下来,打包成jar包。需要注意的是,mvn打包工具需要加个配置,如下是pom.xml文件内容:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.5</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lyy</groupId>
    <artifactId>jarone</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>jarone</name>
    <description>jarone</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <skip>true</skip>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>

顺序执行命令:

mvn clean   #清除由项目编译创建的target

mvn package -DskipTests  #打包,跳过测试用例

mvn install    #安装到本地仓库

二、新建spring boot业务项目usejarTwo,并引入jar包。

以下是目录结构 :需要在启动类中新增对jarone包的扫描(如果jarone所在包是usejartwo包的子集,则不需要)

编写LoginController类

@RestController
@RequestMapping("/Login")
public class LoginController {
    @GetMapping("/logout")
    public List<String> logout(){
        List<String> lstStr=new ArrayList<>();
        lstStr.add("lyy");
        return lstStr;
    }
}

 启动项目,使用postman请求。可以发现可以请求到jarone中PagePermissionController的接口,   也可以访问到LoginController中的接口,且都进到了过滤器。

 

 

 完成,后面就开始写在过滤器jar中修改请求内容以及相应内容。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

编写过滤器jar包并植入到项目中 的相关文章

  • 使用 JPA Criteria API 进行分页的总行数

    我正在系统中为实体实现 高级搜索 功能 以便用户可以使用该实体的属性上的多个条件 eq ne gt lt 等 来搜索该实体 我正在使用 JPA 的 Criteria API 动态生成 Criteria 查询 然后使用setFirstResu
  • Java AES 128 加密方式与 openssl 不同

    我们遇到了一种奇怪的情况 即我们在 Java 中使用的加密方法会向 openssl 生成不同的输出 尽管它们在配置上看起来相同 使用相同的键和 IV 文本 敏捷的棕色狐狸跳过了懒狗 加密为 Base64 字符串 openssl A8cMRI
  • wait() 在游戏中如何工作?

    在 playframework 的文档中here http www playframework org documentation 1 2 1 asynchronous已写 public static void loopWithoutBlo
  • JavaFX 中具有自定义内容的 ListView

    How i can make custom ListView with JavaFx for my app I need HBox with image and 2 Labels for each line listView 您可以通过查看
  • 如何安全地解决这个 Java 上下文类加载器问题?

    我的数百名用户中只有一位在启动我的 Java 桌面应用程序时遇到问题 他只有大约三分之一的时间开始 另外三分之二的时间在启动时抛出 NullPointerException Exception in thread AWT EventQueu
  • 在 S3 中迭代对象时出现“ConnectionPoolTimeoutException”

    我已经使用 aws java API 一段时间了 没有遇到太多问题 目前我使用的是库 1 5 2 版本 当我使用以下代码迭代文件夹内的对象时 AmazonS3 s3 new AmazonS3Client new PropertiesCred
  • Java 8 流 - 合并共享相同 ID 的对象集合

    我有一系列发票 class Invoice int month BigDecimal amount 我想合并这些发票 这样我每个月都会收到一张发票 金额是本月发票金额的总和 例如 invoice 1 month 1 amount 1000
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • 在游戏视图下添加 admob

    我一直试图将 admob 放在我的游戏视图下 这是我的代码 public class HoodStarGame extends AndroidApplication Override public void onCreate Bundle
  • 如何在JSTL中调​​用java方法? [复制]

    这个问题在这里已经有答案了 这可能是重复的问题 我只想调用不是 getter 或 setter 方法的方法例如 xyz 类的 makeCall someObj stringvalue Java类 Class XYZ public Strin
  • java.lang.NumberFormatException: Invalid int: "3546504756",这个错误是什么意思?

    我正在创建一个 Android 应用程序 并且正在从文本文件中读取一些坐标 我在用着Integer parseInt xCoordinateStringFromFile 将 X 坐标转换为整数 Y 坐标的转换方法相同 当我运行该应用程序时
  • 测试弱引用

    在 Java 中测试弱引用的正确方法是什么 我最初的想法是执行以下操作 public class WeakReferenceTest public class Target private String value public Targe
  • 游戏内的java.awt.Robot?

    我正在尝试使用下面的代码来模拟击键 当我打开记事本时 它工作正常 但当我打开我想使用它的游戏时 它没有执行任何操作 所以按键似乎不起作用 我尝试模拟鼠标移动和点击 这些动作确实有效 有谁知道如何解决这个问题 我发现这个问题 如何在游戏中使用
  • HQL Hibernate 内连接

    我怎样才能在 Hibernate 中编写这个 SQL 查询 我想使用 Hibernate 来创建查询 而不是创建数据库 SELECT FROM Employee e INNER JOIN Team t ON e Id team t Id t
  • javafx android 中的文本字段和组合框问题

    我在简单的 javafx android 应用程序中遇到问题 问题是我使用 gradle javafxmobile plugin 在 netbeans ide 中构建了非常简单的应用程序 其中包含一些文本字段和组合框 我在 android
  • Eclipse 中 Spring MVC 模型对象的 (jsp /jstl) 视图中的代码辅助

    在 Spring MVC 中 当将对象放置在视图模型中时 如下所示 public String getUser Model model fetch user model addAttribute user user return viewN
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • ServletContainer 类未找到异常

    我无法再编译我的球衣项目 并且出现以下异常 GRAVE Servlet Project API threw load exception java lang ClassNotFoundException com sun jersey spi
  • GUI Java 程序 - 绘图程序

    我一直试图找出我的代码有什么问题 这个想法是创建一个小的 Paint 程序并具有红色 绿色 蓝色和透明按钮 我拥有我能想到的让它工作的一切 但无法弄清楚代码有什么问题 该程序打开 然后立即关闭 import java awt import

随机推荐

  • Android逆向之旅---爆破一款资讯类应用「最右」防抓包策略原理分析

    一 逆向分析 首先感谢王同学提供的样本 因为王同学那天找到我咨询我说有一个应用Fiddler抓包失败 其实对于这类问题 我一般都会这么回答 第一你是否安装Fiddler证书了 他说他安装了 第二你是否用了我之前说的那个Xposed框架Jus
  • JAVA list加锁_list类里面的东西加锁 (手动加锁方法)

    package privateclass import java util Collection import java util Iterator import java util List import java util ListIt
  • 【计算机组成原理】——原码,反码,补码,移码怎样计算

    机器数与真值 把符号 数字化 的数称为机器数 而把带 或 的数称为真值 正负号用二进制的0 1表示 0 1 x 001 机器数 第一位表示符号 x 1 x 101 真值 直接用 表示 x 5 原码 反码 补码 移码的计算 正数的原码 反码
  • Pycharm绘图时显示额外的“figure”浮窗

    如图所示 不想图片显示在右边 而是单独的一个窗口 这样可以进行点击交互 1 File gt Settings gt 2 找到Tools gt Python Scientific 找到 Python Scientific 去除右边候选框中的勾
  • SpringCache使用

    SpringCache使用 1 引入依赖 引入springcache依赖
  • three.js坐标轴辅助器AxesHelper

    一 效果图 二 添加坐标轴辅助器 使用three js 通过以下代码可以添加坐标轴辅助器 创建坐标轴辅助器 var axesHelper new THREE AxesHelper 5 添加到场景中 scene add axesHelper
  • 私有云平台管理

    更改主机名 controller hostnamectl set hostname controller compute hostnamectl set hostname compute 更改hosts文件 vi etc hosts 插入以
  • Java NIO通信编程

    NIO即非同步非阻塞式IO 有如下几个特点 1 创建一个线程负责处理IO事件和IO事件的分发 2 事件驱动机制 事件到达之后触发 3 线程之间通过wait notify等方式通信 减少线程间切换 NIO客户端和服务端需都维护一个管理通道的对
  • flutter加载不同分辨率本地图片

    flutter移动开发怎么加载本地图片 首先在该项目根目录也就是和ios android同级创建一个images文件夹用来存放图片资源 然后放入需要加载的图片资源例如ic phone png 然后在项目目录下找到pubspec yaml文件
  • 【定量分析、量化金融与统计学】统计推断基础 番外(1)---T table与Z table的值

    目录 一 前言 二 T table 三 Z table 一 前言 为了方便之后的例题讲解 这里放上T tabel和Z table的值 怎么查表 本篇中会直接讲 所以这里就只看表格就行 本篇为工具篇 二 T table 我们给两个版本 适合用
  • Redis学习笔记:数据结构和命令

    本文是自己的学习笔记 主要参考资料如下 马士兵 4 Redis的五大数据类型 1 1 String 1 1 1 String 类型的命令 1 1 2 存储对象 1 2 List 1 2 1 List基本命令 1 2 2 List高级命令 1
  • linux 提高文件读写速度 mmap,【EA字符串Linux面试题】面试问题:kafka读写… - 看准网...

    传统IO 缓存IO 传统IO也就是缓存IO 数据先从磁盘复制到内核空间缓冲区 然后从内核空间缓冲区复制到应用程序的地址空间 这里的内核缓冲区也就是页缓存 PageCache 是虚拟内存空间 读操作 操作系统检查内核的缓冲区有没有需要的数据
  • QT结构体中定义QString注意点

    当需要进行多进程通讯时 结构体中出现字符串时尽量采用C 标准类型 尽量少用QT特有类型QString字符串 尽量采用char 类型替代 这样在多进程通讯时 可直接通过memcpy直接复制内存的方式 而不用担心内存异常问题 由于QString
  • 动手搭建第一个小程序音视频Demo

    欢迎大家前往云 社区 获取更多腾讯海量技术实践干货哦 作者 小程序音视频产品经理 腾讯云提供了全套技术文档和源码来帮助您快速构建一个音视频小程序 但是再好的源码和文档也有学习成本 为了尽快的能调试起来 我们还提供了一个免费的一键部署服务 您
  • 华为OD机试 - 最长连续子序列(Java )

    题目描述 有N个正整数组成的一个序列 给定整数sum 求长度最长的连续子序列 使他们的和等于sum 返回此子序列的长度 如果没有满足要求的序列 返回 1 输入描述 第一行输入是 N个正整数组成的一个序列 第二行输入是 给定整数sum 输出描
  • 02 电阻容模型的创建

    打开状态栏 画电阻 电容的封装 实操要点 1 SCH Library一定要先选中 出现元件库的列表 2 放置完元件可以按ESC取消 3 Ctrl C V可以复制粘贴用 4 多余的线可以使用Delete删除 5 可以按鼠标右键轻微的拖动屏幕
  • ViLT:最简单的多模态Transformer

    原文链接 感谢原作者 ViLT 最简单的多模态Transformer 陀飞轮 复
  • 两台外网计算机远程桌面访问(内网穿透)

    背景 如图所示 项目中需要远程访问项目现场的外网计算机 通过外网计算机再访问到现场内网环境中的另外一台计算机 原计划通过市面上的远程桌面软件 如向日葵 ToDesk AnyDesk等 建立两台外网计算机的远程连接 在使用windows自带的
  • UmiJS介绍--mock(四)

    umi 里约定 mock 文件夹下的文件即 mock 文件 文件导出接口定义 支持基于 require 动态分析的实时刷新 支持 ES6 语法 以及友好的出错提示 1 引入 Mock js Mock js是常用的辅助生成模拟数据的第三方库
  • 编写过滤器jar包并植入到项目中

    公司有项目有个需求 就是希望可以写一个统一的权限管理 每次开发新项目的时候 可以通过添加依赖包进行权限的获取 验证 至于为什么不使用aop 拦截器二使用过滤器 是因为在java中 如果3者同事存在 最先执行的是过滤器 一 新建第三方过滤器j