您现在的位置是:首页 > 正文

spring切面注解失效

2024-04-01 03:10:31阅读 1

在项目中使用切面注解做数据脱敏时,导出的数据也需要脱敏处理,遇到了在一个类里面调用本类的方法切面失效,解决方法如下:

切面注解:

package com.t3.ts.driver.resume.aspect;

import java.lang.annotation.*;

/**
 * @Description: 数据脱敏注解 Filed
 * @Date: 2019/9/10
 * @Author: wm yu
 */
@Inherited
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptField {
}
package com.t3.ts.driver.resume.aspect;

import java.lang.annotation.*;

/**
 * @Description: 数据脱敏注解 Method
 * @Date: 2019/9/10
 * @Author: wm yu
 */
@Inherited
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface EncryptMethod {
}

切面类:

package com.t3.ts.driver.resume.aspect;

import com.alibaba.fastjson.JSON;
import com.t3.ts.driver.resume.utils.MD5Util;
import com.t3.ts.driver.resume.utils.StringUtils;
import com.t3.ts.driver.resume.utils.excel.FieldReflectionUtil;
import com.t3.ts.result.PageResult;
import com.t3.ts.result.Response;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;

import java.lang.reflect.Field;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

/**
 * @class_name: DecryptAspect
 * @description:
 * @author: wm_yu
 * @create: 2019/09/10
 **/
@Aspect
@Component
@Order(-1)
public class EncryptAspect {

    private final static Logger log = LoggerFactory.getLogger(EncryptAspect.class);
    /**
     * 身份证脱敏正则 保留前后四位
     */
    private final static String IDENTITY_CARD_DESENSITIZATION = "(?<=\\d{4})\\d(?=\\d{4})";
    /**
     *银行卡脱敏正则  保留前后四位
     */
    private final static String BLANK_CARD_DESENSITIZATION = "(?<=\\d{4})\\d(?=\\d{4})";
    /**
     * 手机号脱敏正则 保留前三后四位
     */
    private final static String MOBILE_DESENSITIZATION = "(?<=\\d{3})\\d(?=\\d{4})";
    /**
     * 定义其他字段脱敏长度
     */
    private final static Integer OTHER_DESENSITIZATION_LENGTH = 3;

    private final static Integer IDENTITY_CARD_LENGTH_18 = 18;
    private final static Integer IDENTITY_CARD_LENGTH_15 = 15;
    private final static Integer MOBILE_LENGTH = 11;

    @Pointcut("@annotation(com.t3.ts.driver.resume.aspect.EncryptMethod)")
    public void pointCut(){}

    /**
     * 注明切点
     */
    @Around("pointCut()")
    public Object around(ProceedingJoinPoint joinPoint){
        Object responseObj = null;
        try {
            responseObj = joinPoint.proceed();
             //数据脱敏
            handleEncrypt(responseObj);
        } catch (Throwable throwable) {
           log.error("数据脱敏异常:{}", JSON.toJSONString(responseObj),throwable);
        }
        return responseObj;
    }

    /**
     * 处理加密
     *
     * @param responseObj
     */
    private void handleEncrypt(Object responseObj) throws IllegalAccessException {
        if (!Optional.ofNullable(responseObj).isPresent()) {
            return;
        }
        Object var = null;
        if(responseObj instanceof List){
            var = respo

网站文章

  • 面试中问的最多的线程池,你搞懂了吗

    面试中问的最多的线程池,你搞懂了吗

    什么是线程池,为什么使用线程池,如何使用线程池,你搞懂了吗

    2024-04-01 03:10:24
  • 电脑如何去掉u盘写保护的状态

    电脑如何去掉u盘写保护的状态

    在平时状态下U盘盘符格式都是FAT32的,我们可以先把他转换成NTFS格式,在电脑打开命令提示符界面,然后输入convert H: /fs:ntfs /nosecurity /x的命令,接着按下回车。...

    2024-04-01 03:09:44
  • 微信打开网页字体抖动

    //初始化微信字体大小 initFontsize() { (function () { if ( typeof WeixinJSBridge == "object" && typeof WeixinJSBridge.invoke == "function" ) { handleFontSize(); ...

    2024-04-01 03:09:36
  • php变量函数(转)

    PHP中的变量函数(Variable Functions)debug_zval_dump — Dumps a string representation of an internal zend value to output doubleval — 获取参数的浮点值部分,是floatval()函数的别名 empty — 检测变量的值是否为空 floatval — 获取参数的浮

    2024-04-01 03:09:29
  • ISCTF赛后总结

    ISCTF赛后总结

    学了一个月的菜鸡,第一次打ctf比赛,感觉自己实在太菜了,总结总结经验。 Web 跟着队友混,队友Web贼强,Web全AK. CRYPTO 弯弯曲曲的路 不合格的pwn手竟然拿到密码题的一血。。。 题...

    2024-04-01 03:08:51
  • 几种数据载体的比较

    数据常用的表达形式有以下几种: 变量,结构,内表,对象,数组&amp;集合(ABAP里没有)。 变量就是单一值,不多说了。 在介绍结构和内表之前需要先定义类型。 类型: TYPES: BEGIN OF ty_ppl, ID type xx, name type xx, age type xx, END OF ty_ppl.

    2024-04-01 03:08:43
  • htons函数详解

    Part 1: htons函数具体解释 在Linux和Windows网络编程时需要用到htons和htonl函数,用来将主机字节顺序转换为网络字节顺序。 在Intel机器下,执行以下程序 int main() ...{ printf(&quot;%d /n&quot;,htons(16)); return 0; } 得到的结果是4096,初一看感觉很怪。

    2024-04-01 03:08:35
  • 04.sqlite3学习——DDL(数据定义:创建和删除表)

    04.sqlite3学习——DDL(数据定义:创建和删除表)

    数据定义(DDL):用于用户定义、删除和修改数据模式。但在sqlite3中不存在用户这一概念,所以sqlite的DDL包括创建表、修改表和删除表

    2024-04-01 03:08:27
  • seaborn库学习----分布图displot、histplot、kdeplot、ecdfplot

    seaborn库学习----分布图displot、histplot、kdeplot、ecdfplot

    提供的api 说明 displot Figure-level interface for drawing distribution plots onto a FacetGrid. 图形级界面,用于在F...

    2024-04-01 03:07:46
  • 降级移除宝塔官网账号绑定限制的方法

    降级移除宝塔官网账号绑定限制的方法。

    2024-04-01 03:07:39