iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >mybatisPlus自定义拦截器
  • 249
分享到

mybatisPlus自定义拦截器

sql数据库mysql 2023-08-18 06:08:15 249人浏览 安东尼
摘要

mybatisPlus自定义拦截器 一开始数据库的数据是明文存储,后面某些数据需要变成密文保存在数据库,而且密文的字段在很多数据表中都存在。进行select操作时,把密文查询出来并转成明文。 1、使用切面,当接口获取到数据后,遍历

mybatisPlus自定义拦截器

一开始数据库的数据是明文存储,后面某些数据需要变成密文保存在数据库,而且密文的字段在很多数据表中都存在。进行select操作时,把密文查询出来并转成明文。
1、使用切面,当接口获取到数据后,遍历数据找到密文字段,把密文解密得到明文
2、使用mybatisPlus自定义拦截器,在sql语句执行前拦截,把 字段 改成 IFNULL(AES_DECRYPT(UNHEX(字段), 密码),字段) AS 字段,sql语句可以解密得到明文。
下面是mybatisPlus自定义拦截器的代码:

@EnableTransactionManagement@Configurationpublic class MybatisPlusConfig {    @Resource    private DataScopeInterceptor dataScopeInterceptor;    @Bean    public MybatisPlusInterceptor mybatisPlusInterceptor() {        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();        // 数据权限过滤        interceptor.addInnerInterceptor(dataScopeInterceptor);        return interceptor;    }}
@Componentpublic class DataScopeInterceptor implements InnerInterceptor {private static Set selectItemSet = new HashSet<>();    @Override    public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) {        String buildSql = boundSql.getSql();        try {            Statement statement = CCjsqlParserUtil.parse(buildSql);            Select select = (Select) statement;            processSelectBody(select.getSelectBody());            PluginUtils.MPBoundSql mpBoundSql = PluginUtils.mpBoundSql(boundSql);            mpBoundSql.sql(select.toString());        } catch (JSQLParserException e) {            throw ExceptionUtils.mpe("Failed to process, Error SQL: %s", e.getCause(), buildSql);        } catch (BaseBusinessException be) {            log.warn(be.getMessage());        }    }    private void processSelectBody(SelectBody selectBody) throws BaseBusinessException, JSQLParserException {        if (selectBody == null) {            throw new BaseBusinessException(ResponseCodeEnum.IGNORE_DATA_SCOPE);            // return;        }        if (selectBody instanceof PlainSelect) {            processPlainSelect((PlainSelect) selectBody);        } else if (selectBody instanceof WithItem) {            WithItem withItem = (WithItem) selectBody;            processSelectBody(withItem.getSelectBody());        } else {            SetOperationList operationList = (SetOperationList) selectBody;            List selectBodys = operationList.getSelects();            if (CollectionUtils.isNotEmpty(selectBodys)) {                for (SelectBody body : selectBodys) {                    processSelectBody(body);                }            }        }    }    private void proprocessPlainSelect(PlainSelect plainSelect) throws JSQLParserException {        if(selectItemSet.size()>0) selectItemSet = new HashSet<>();        FromItem fromItem = plainSelect.getFromItem();        List joins = plainSelect.getJoins();        processSelectColumns(plainSelect, fromItem);        if (CollectionUtils.isNotEmpty(joins)) {            for (Join join : joins) {                if (join.isInner() || join.isFull() || join.isSimple()) {                    FromItem rightItem = join.getRightItem();                    processSelectColumns(plainSelect, rightItem);                } else if (join.isLeft()) {                    FromItem rightItem = join.getRightItem();                    processSelectColumns(plainSelect, rightItem);                } else if (join.isRight()) {                    FromItem rightItem = join.getRightItem();                    processSelectColumns(plainSelect, rightItem);                }            }        }        if (selectItemSet.size() == 0) return;        List filterItem = new ArrayList<>();        List selectItemList=selectItemSet.stream()                .filter(e -> {                    boolean found = !filterItem.contains(e.toString());                    filterItem.add(e.toString());                    return found;                })                .collect(Collectors.toList());        if (selectItemList.size() > 0) {            plainSelect.setSelectItems(selectItemList);        }    }    // select时解密; *号根据具体的表替换成具体的字段    private void processSelectColumns(PlainSelect plainSelect, FromItem fromItem) {    if (! (fromItem instanceof Table)) return;        Table table = (Table) fromItem;        for (SelectItem selectItem : plainSelect.getSelectItems()) {        // 1、做判断,不是需要解密的字段和*号就直接add        // 2、是需要解密的字段,则变成IFNULL(AES_DECRYPT(UNHEX(字段), 密码),字段) AS 字段,再add        // 3、*号则转换成具体的表字段,遍历表字段,是需要解密的字段则转换后add,不是就直接add。add前需要把字段String变成selectItem        // 最后。 sql语句会出现 table b;b.id bid、b.id、id;等情况,根据实际情况判断        selectItemSet.add(selectItem);        }    }

来源地址:https://blog.csdn.net/weixin_43381157/article/details/126764495

您可能感兴趣的文档:

--结束END--

本文标题: mybatisPlus自定义拦截器

本文链接: https://www.lsjlt.com/news/373631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • mybatisPlus自定义拦截器
    mybatisPlus自定义拦截器 一开始数据库的数据是明文存储,后面某些数据需要变成密文保存在数据库,而且密文的字段在很多数据表中都存在。进行select操作时,把密文查询出来并转成明文。 1、使用切面,当接口获取到数据后,遍历...
    99+
    2023-08-18
    sql 数据库 mysql
  • struts2拦截器怎么自定义
    要自定义Struts2拦截器,您需要按照以下步骤进行操作:1. 创建一个实现 `com.opensymphony.xwork2.in...
    99+
    2023-08-26
    struts2
  • Java SpringMVC实现自定义拦截器
    目录SpringMVC实现自定义拦截器1 拦截器(interceptor)的作用2 拦截器和过滤器区别3.实现过程3.1创建拦截器类实现HandlerInterceptor接口3.2...
    99+
    2024-04-02
  • springboot自定义拦截器的方法
    拦截器应该分属于web框架的组件,每个框架提供的自己的支持,实现方式也就不同。例如Struts和Spring,以下是Spring 的拦截器总结,它是基于动态代理(反射)实现的。 Sp...
    99+
    2024-04-02
  • Mybatis拦截器实现自定义需求
    目录前言一、应用场景二、Mybatis实现自定义拦截器2.1、编写拦截器2.2、添加到Mybatis配置2.3、测试2.4、小结三、拦截器接口介绍intercept 方法plugin...
    99+
    2023-05-19
    Mybatis自定义拦截器 Mybatis 拦截器
  • Spring中自定义拦截器怎么用
    小编给大家分享一下Spring中自定义拦截器怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!创建自定义拦截器类(UserTokenInterceptor)并实...
    99+
    2023-06-29
  • 怎么自定义redis缓存拦截器
    自定义Redis缓存拦截器的步骤如下:1. 创建一个实现了`HandlerInterceptor`接口的自定义类,并重写其三个方法`...
    99+
    2023-09-11
    redis
  • Spring中自定义拦截器的使用
    1、创建自定义拦截器类(UserTokenInterceptor)并实现HandlerInterceptor 接口,再重写方法,代码如下: public class UserToke...
    99+
    2024-04-02
  • SpringMVC超详细介绍自定义拦截器
    目录1.什么是拦截器2.自定义拦截器执行流程图3.自定义拦截器应用实例1.快速入门2.注意事项和细节3.Debug执行流程4.多个拦截器1.多个拦截器执行流程示意图2.应用实例3.主...
    99+
    2024-04-02
  • Springboot如何实现自定义mybatis拦截器
    这篇文章将为大家详细讲解有关Springboot如何实现自定义mybatis拦截器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。实践的准备 : 整合mybatis ,然后故意写了3个查询方法, ...
    99+
    2023-06-22
  • Java SpringMVC如何实现自定义拦截器
    本篇内容主要讲解“Java SpringMVC如何实现自定义拦截器”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java SpringMVC如何实现自定义拦截器”吧!Spri...
    99+
    2023-06-29
  • struts2自定义拦截器的示例代码
    题目:使用struts2自定义拦截器,完成用户登陆才能访问权限的实现 在session中存放user变量表示用户登陆,若user为空则用户没有登陆,反之登陆 显示提示信息(请先登录)定义拦截器在struts.xml中定义拦截器使用标签&...
    99+
    2023-05-31
    struts2 拦截器 st
  • 链自定义 GRPC 客户端拦截器/DialOptions
    在进行网络通信时,自定义GRPC客户端拦截器和DialOptions是非常有用的工具。这些工具可以帮助开发者在GRPC客户端中添加额外的功能和处理逻辑,以满足特定的需求。php小编香蕉...
    99+
    2024-02-14
  • MyBatis自定义SQL拦截器示例详解
    目录前言定义是否开启注解注册SQL 拦截器处理逻辑如何使用总结前言 本文主要是讲通过 MyBaits 的 Interceptor 的拓展点进行对 MyBatis 执行 SQL 之前做...
    99+
    2024-04-02
  • Springboot自定义mybatis拦截器实现扩展
    前言 相信大家对拦截器并不陌生,对mybatis也不陌生。 有用过pagehelper的,那么对mybatis拦截器也不陌生了,按照使用的规则触发sql拦截,帮我们自动添加分页参数 ...
    99+
    2024-04-02
  • MyBatis中怎么实现自定义的SQL拦截器
    在 MyBatis 中实现自定义的 SQL 拦截器,通常可以通过实现 org.apache.ibatis.plugin.Interc...
    99+
    2024-05-08
    MyBatis SQL
  • springboot自定义拦截器简单使用及举例
    目录1. 自定义拦截器2. 拦截器登录验证的小demo2.1 配置pom.xml2.2 创建User的bean组件2.3 创建需要的表单页面以及登录成功的页面2.4 编写contro...
    99+
    2023-01-28
    springboot自定义拦截器 springboot拦截所有请求 springboot 拦截器
  • 拦截器在Spring MVC中怎么实现自定义
    拦截器在Spring MVC中怎么实现自定义?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1. 引言拦截器(Interceptor)实现对每一个请求处理前后进行...
    99+
    2023-05-31
    spring mvc
  • Mybatis自定义拦截器和插件开发详解
    前言 在Spring中我们经常会使用到拦截器,在登录验证、日志记录、性能监控等场景中,通过使用拦截器允许我们在不改动业务代码的情况下,执行拦截器的方法来增强现有的逻辑。在mybati...
    99+
    2024-04-02
  • SpringBoot配置自定义拦截器实现过程详解
    目录1. HttpServletRequest包装类2. 使用Filter将request传递下去3. 添加拦截器4. 全局异常处理器5. 配置拦截器1. HttpServletRe...
    99+
    2022-11-13
    SpringBoot自定义拦截器 SpringBoot自定义登陆拦截器 SpringBoot拦截器
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作