springboot启动项目打印接口列表的实现方法
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,本篇内容介绍了"springboot启动项目打印接口列表的实现方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
千家信息网最后更新 2025年11月17日springboot启动项目打印接口列表的实现方法
本篇内容介绍了"springboot启动项目打印接口列表的实现方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
目录
springboot 启动项目打印接口列表
环境
修改配置文件
Springboot项目添加接口入参统一打印
新建注解,用于实现参数打印功能的增强
自定义序列化规则
写参数打印增强,这里选择环绕增强
springboot 启动项目打印接口列表
环境
springboot 2.3.2.RELEASE
修改配置文件
logging: level: org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping: trace
结果:
Springboot项目添加接口入参统一打印
需求:要求接口被调用时要打印被调用方法名,以及入参情况,参数格式化时选择fastjson
注:使用fastjson序列化时脱敏,建议入参统一使用自定义的对象类型作为入参
如果不需要参数脱敏,直接使用增强中相关代码,并去除参数脱敏相关代码即可
新建注解,用于实现参数打印功能的增强
@Target({ElementType.METHOD})@Retention(RetentionPolicy.RUNTIME)@Documentedpublic @interface ParamInfo { /** * 取消统一打印参数 * 默认为false统一打印 * 如需自定义参数打印 请赋值为true */ boolean unPrint() default false; /** * 需要脱敏的字段,如密码等 */ String[] fields() default {};}自定义序列化规则
/** * 序列化过滤器:值替换 * */public class ReplaceFieldFilter implements ValueFilter { /** * 需要进行替换的属性名和替换值 * key:属性名 * value:替换值 */ private Map fieldMap; public ReplaceFieldFilter() { } public ReplaceFieldFilter(Map fieldMap) { this.fieldMap = fieldMap; } @Override public Object process(Object o, String name, Object value) { if(!CollectionUtils.isEmpty(fieldMap)){ Iterator> iterator = fieldMap.entrySet().iterator(); while (iterator.hasNext()){ Map.Entry next = iterator.next(); if(next.getKey().equalsIgnoreCase(name)){ return next.getValue(); } } } return value; } public Map getFieldMap() { return fieldMap; } public void setFieldMap(Map fieldMap) { this.fieldMap = fieldMap; } /** * 传入需要脱敏的字段名,序列化时格式化为 * 号 */ public ReplaceFieldFilter(String... fields) { String str = "******"; fieldMap = new HashMap<>(4); for (String field : fields) { fieldMap.put(field, str); } }} 写参数打印增强,这里选择环绕增强
@Component@Aspect//表示增强的执行顺序,如果多个增强,数值小的先被执行@Order(0)public class ParamInfoAspect { private static final Logger LOGGER = LoggerFactory.getLogger(ParamInfoAspect.class); @Around("execution(* com.service.impl.*.*(..))") public Object printParam(ProceedingJoinPoint joinPoint) throws Throwable { long startTime = System.currentTimeMillis(); String requestId = RandomStringUtils.randomAlphanumeric(16); Object returnValue = null; try { Object[] args = joinPoint.getArgs(); // 获取方法对象 MethodSignature signature = (MethodSignature) joinPoint.getSignature(); Method method = signature.getMethod(); //通过注解获取脱敏字段,之后初始化fieldMap,完成字段脱敏 ParamInfo annotation = method.getAnnotation(ParamInfo.class); Map fieldMap = new HashMap<>(4); fieldMap.put("password", "******"); if (annotation != null) { //获取需要脱敏的字段名数组 String[] fields = annotation.fields(); for (String field : fields) { fieldMap.put(field, "******"); } } String param; //参数整合,多字段入参整合为对象,单个对象入参格式不变 if (args.length > 1 || (args.length == 1 && args[0].getClass() == String.class)) { Map paramMap = new LinkedHashMap<>(); String[] parameterNames = signature.getParameterNames(); for (int i = 0; i < parameterNames.length; i++) { paramMap.put(parameterNames[i], args[i]); } param = "[" + JSON.toJSONString(paramMap, new ReplaceFieldFilter(fieldMap)) + "]"; } else { param = JSON.toJSONString(args, new ReplaceFieldFilter(fieldMap)); } String methodName = method.getName(); LOGGER.info("method:[{}], parameter:{}, requestId:[{}]", methodName, param, requestId); returnValue = joinPoint.proceed(); return returnValue; } catch (Exception e) { LOGGER.error("system is error:", e); //可在这里定义程序异常时的错误返回值 returnValue = ErrorCode.SYSTEM_ERROR; return returnValue; } finally { LOGGER.info("request cost:{}ms, requestId:[{}]", System.currentTimeMillis() - startTime, requestId); LOGGER.info("returnValue:[{}], requestId:[{}]", returnValue, requestId); } }} "springboot启动项目打印接口列表的实现方法"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
参数
脱敏
接口
项目
字段
序列
统一
方法
对象
格式
注解
选择
代码
内容
功能
属性
情况
文件
更多
环境
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
虚拟服务器可以做官网吗
网络安全教育个案大班观察记录
成都软件开发过程中注意事项
后备人数据库
软件开发阶段采用什么策略
什么是单片机软件开发
猴博士数据库应用技术
秦州区网络安全宣传活动
flash软件开发多少钱
服务器上能不能装安卓系统
达梦数据库同步到kafka
数据库的变长和定长
网络安全法普法知识竞赛
服务器cpu一下子很高
互联网科技小程序
淮安银联软件开发服务至上
韩语软件开发工程师
目前最常用的数据库模型是什么
博罗县网络安全宣传周公开课
oppo网站的数据库在哪里
tkinter显示数据库的表
如何保障服务器的安全
左外连接数据库失败
软件开发的基本架构有哪些
数据库优化sum函数
网络安全与执法类的视力要求
武汉在线教育系统开发软件开发
福建软件开发公司报价
魔兽世界网络安全任务
服务器可以做硬盘吗