当前位置: 首页 > news >正文

医院营销型网站建设网站开发技术主题

医院营销型网站建设,网站开发技术主题,合肥网站商城开发,wordpress加群插件1.注解介绍Annotation (注解) 是 Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。注解本质是一个继承了Annotation 的特殊接口:…

1.注解介绍

Annotation (注解) 是 Java5 开始引入的新特性,可以看作是一种特殊的注释,主要用于修饰类、方法或者变量,提供某些信息供程序在编译或者运行时使用。

注解本质是一个继承了Annotation 的特殊接口:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {}public interface Override extends Annotation{}

注解只有被解析之后才会生效,常见的解析方法有两种:

  • 编译期直接扫描:编译器在编译 Java 代码的时候扫描对应的注解并处理,比如某个方法使用@Override 注解,编译器在编译的时候就会检测当前的方法是否重写了父类对应的方法。
  • 运行期通过反射处理:像框架中自带的注解(比如 Spring 框架的 @Value@Component)都是通过反射来进行处理的。

2. 自定义注解实现数据加密

2.1 创建自定义注解,自定义注解的创建需要使用 @interface 关键字

@Target({ElementType.METHOD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface EncryptMethod  {String[] fields() default ""; // 用于指定需要加密的字段名称
}
  • @Target:定义注解可以应用的目标元素类型。

  • @Retention:定义注解的保留策略(源码、编译时、运行时)。

  • @Documented:标记注解类型,使其在 JavaDoc 文档中可见。

2.2 解析自定义注解

@Aspect
@Component
public class EncryptAspect {@PostConstructpublic void init() {System.out.println("EncryptAspect initialized.");}/* ---------- 切点 ---------- */@Pointcut("@annotation(encryptMethod)")public void encryptPointcut(EncryptMethod encryptMethod) {}/* ---------- 环绕通知 ---------- */@Around("encryptPointcut(encryptMethod)")public Object encryptFields(ProceedingJoinPoint jp, EncryptMethod encryptMethod) throws Throwable {System.out.println("EncryptAspect invoked for: " + jp.getSignature());// 1. 处理入参Object[] args = jp.getArgs();if (args != null) {for (Object arg : args) {if (arg == null) continue;for (String fieldName : encryptMethod.fields()) {encryptField(arg, fieldName);}}}// 2. 执行原方法Object result = jp.proceed();// 3. 处理返回值if (result != null) {// 情况1:直接返回 Listif (result instanceof Collection<?>) {for (Object item : (Collection<?>) result) {for (String field : encryptMethod.fields()) {encryptField(item, field);}}}// 情况2:返回 TableDataInfoelse if (result instanceof TableDataInfo) {TableDataInfo table = (TableDataInfo) result;List<?> rows = table.getRows();if (rows != null) {for (Object row : rows) {for (String field : encryptMethod.fields()) {encryptField(row, field);}}}}// 情况3:单个对象else {for (String field : encryptMethod.fields()) {encryptField(result, field);}}}return result;}/* ---------- 反射加密指定字段 ---------- */private void encryptField(Object target, String fieldName) {try {Field field = findField(target.getClass(), fieldName);if (field == null) return;field.setAccessible(true);Object value = field.get(target);if (value instanceof String) {String cipher = encrypt((String) value);field.set(target, cipher);}} catch (Exception e) {// 记录日志即可,不要阻断业务e.printStackTrace();}}/* ---------- 递归找字段(支持父类) ---------- */private Field findField(Class<?> clazz, String fieldName) {for (; clazz != Object.class; clazz = clazz.getSuperclass()) {try {return clazz.getDeclaredField(fieldName);} catch (NoSuchFieldException ignored) {}}return null;}/* ---------- AES 加密 ---------- */private String encrypt(String plain) {try {String key = "XnUFyFy+9G0JWc9LwaYAWw==";byte[] cipherBytes = AES.encrypt(plain.getBytes(StandardCharsets.UTF_8),key.getBytes(), AES.ALGORITHM_AEPP);return Base64.getUrlEncoder().withoutPadding().encodeToString(cipherBytes);} catch (Exception e) {e.printStackTrace();return plain;}}
}

切面:EncryptAspect

  • @Aspect:标记该类为一个切面类。

切点:

@Pointcut("@annotation(encryptMethod)")
  • @Pointcut:定义一个切点,指定哪些方法会被拦截。

  • @annotation(encryptMethod):匹配所有被 @EncryptMethod 注解标记的方法。

连接点:

public Object encryptFields(ProceedingJoinPoint jp, EncryptMethod encryptMethod) throws Throwable {

ProceedingJoinPoint:提供对目标方法的访问,可以通过 proceed() 方法执行目标方法

通知:

@Around("encryptPointcut(encryptMethod)")
  • @Around:定义一个环绕通知,用于在方法执行前后执行自定义逻辑。

总结执行逻辑:

  1. 定义切点:匹配被 @EncryptMethod 注解标记的方法。

  2. 环绕通知:在方法执行前后执行自定义逻辑。

  3. 处理入参:对方法的参数中的指定字段进行加密。

  4. 执行原方法:调用目标方法。

  5. 处理返回值:对返回值中的指定字段进行加密。

  6. 反射加密:通过反射机制访问和修改字段值。

  7. AES 加密:使用 AES 算法对字段值进行加密。

这种实现方式可以灵活地对方法的参数和返回值进行加密处理,适用于需要对敏感数据进行加密的场景。

http://www.dtcms.com/a/615556.html

相关文章:

  • 吉林市建设工程档案馆网站做网站优化如何写方案
  • 微信公众号里的网站怎么做的做公司产品展示网站
  • 做个简单的网站app开发的流程
  • 做网站高校视频单位装专用的网站网页归档
  • 徐州有哪些制作网站的公司wordpress 获取最新文章
  • 免费网站应用软件制作网页倒计时按钮
  • 在公司网站建设会议上的汇报有没有哪种网站推荐一下
  • 数 码 管
  • 黑彩网站怎么做零一云主机
  • 电商网站需求分析内蒙古兴泰建设集团信息化网站
  • 平邑网站建设可以用手机建设网站吗
  • 龙岩做网站的公司一个网站的年维护费
  • MySQL 并发控制机制详解:锁机制、MVCC 与 Read View
  • 学做php网站有哪些怎么做网站投放广告
  • 泾阳网站建设网站建设 百度经验
  • 注册网站花的钱做会计分录河北保定最新消息
  • 海网站建设生产厂家哪家好广告公司现状
  • 服务器添加网站asp.net企业网站建设
  • 中国轻工建设协会网站最方便在线网站开发
  • 初中信息技术 网站制作无锡谁会建商务网站
  • 自己做网站需要学些什么微信开发网站建设程序
  • 移动端网站建设服务商中文网站开发软件
  • 从“学习到学历”与从“学历到学习”
  • 卫星通信中的交叉极化干扰及其在链路预算中的影响
  • 网站表现形式做公司网站大概需要多少钱啊
  • AstraOS 1.90 基础架构版(续)
  • 网页设计网站制作流程广州网站建设新际
  • 石柱土家族网站建设江门网页设计
  • 用网站做成软件WordPress关闭注册邮箱验证
  • 网站嵌入播放器丽水网站开发