springboot启动项目打印接口列表的实现方法
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,本篇内容介绍了"springboot启动项目打印接口列表的实现方法"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能
千家信息网最后更新 2025年02月01日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 MapfieldMap; 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); MapfieldMap = 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安全错误
数据库的锁怎样保障安全
长沙安卓软件开发流程
政务软件开发作用
网络安全是不是和黑客有关
南京crm软件开发代码
应用软件开发和c 研发
网络安全业务骨干培训
南充网络技术调试
手机软件开发讲座
网络安全事件案例的文章
电力网络安全事件应急演练
软件开发两年内不得收取运维费
急求中国生物医学文献数据库
直播流媒体服务器
互联网证券金融科技
怎么关掉网络安全防护视频
当当网网络技术框架
服务器机柜过滤风扇批发价
2008 ftp 服务器
数据库的范式之间的包含关系
纬领网络安全研究院李彦江
成都做数据库带亮的公司
软件开发工程师职业方向
sql数据库安装教程2008
周鸿祎谈软件开发高频痛点
深圳配资盘软件开发
中国校园服务器地址
ug无效的服务器名称
扬州网络营销软件开发哪个好
青少年积极参加网络安全科普
服务器开发工程师招聘