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

dedecms 做门户网站西安做seo的公司

dedecms 做门户网站,西安做seo的公司,个体工商户注册流程,网络营销包括哪些策略大家项目中肯定都会用到日志打印#xff0c;目的是为了以后线上排查问题方便#xff0c;但是有些企业对输出的日志包含的敏感(比如#xff1a;用户身份证号#xff0c;银行卡号#xff0c;手机号等)信息要进行脱敏处理。 哎#xff01;我们最近就遇到了日志脱敏的改造。可…        大家项目中肯定都会用到日志打印目的是为了以后线上排查问题方便但是有些企业对输出的日志包含的敏感(比如用户身份证号银行卡号手机号等)信息要进行脱敏处理。 哎我们最近就遇到了日志脱敏的改造。可以说是一波三折。 浩浩荡荡的日志脱敏改造就这样开始.......... 第一季 在项目中所有log.info方法输出日志的地方手工脱敏很low的一种方法 初期想法很简单就是根据业务判断哪些info输出的地方可能包含敏感信息然后进行手工脱敏。但是有很大弊端一是工作量大二是业务不熟悉很难一次改全。 脱敏工具类 package com.lsl.utills;public class Utils {public static String checkParams(String str){if (str ! null){String strnew str.replaceAll(1[3-9]\\d{9},***);return strnew;}else {return ;}} }代码中调用这个工具类 package com.lsl.controller;import com.lsl.utills.Utils; import com.lsl.vo.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;Controller RequestMapping(/lsl) public class LogbackTestController {private static final Logger LOG LoggerFactory.getLogger(LogbackTestController.class);PostMapping(value qryUser, produces application/json;charsetUTF-8)ResponseBodypublic String qryUser(){User user new User();user.setUserName(LSL);user.setUserPwd(123asd);user.setUserAddr(北京海淀);user.setUserAge(21);user.setUserTel(15803125588);LOG.info(用户信息{},user.toString());LOG.info(脱敏后的用户信息{}, Utils.checkParams(user.toString()));return success;} }结果截图 这种情况确实也能达到脱敏的目的但是如果代码中有好多info日志输出那么都需要改动工作量太大还容易拉下没有改动的地方。其实我们初期就是这种脱敏反复改了好几次总有遗漏的地方忘记改了。 第二季想研究一种省时省力的方式能不能通过AOP切入log.info方法进行统一脱敏 大概思路就是创建一个切面在调用info方法前把打印内容通过上面的工具类脱敏后在打印。 切面 package com.lsl.config;import com.lsl.utills.Utils; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut;Aspect public class LogInfoAspect {Pointcut(execution(* org.slf4j.Logger.info(..)))public void loginfoPointcut(){}Before(loginfoPointcut() args(msg))public void bfLogInfo(ProceedingJoinPoint joinPoint,String msg) throws Throwable{System.out.println(切入前参数msg msg);String newStr Utils.checkParams(msg);System.out.println(脱敏处理后参数 newStr);joinPoint.proceed(new Object[]{newStr});}Around(loginfoPointcut() args(msg))public void adLogInfo(ProceedingJoinPoint joinPoint,String msg) throws Throwable{ // String arg (String)joinPoint.getArgs()[0];System.out.println(切入前参数msg msg);String newStr Utils.checkParams(msg);System.out.println(脱敏处理后参数 newStr);joinPoint.proceed(new Object[]{newStr});} }结果是没法切入到info方法也就无法脱敏了 如下图 原因也很简单AOP是交付spring托管的bean才能使用动态代理实现切入进行操作。然后logback并没有由spring托管所以不行。 我后来想到在配置类里交付spring托管不就行了但是也不行大家猜猜是什么原因呢 第三季利用logback脱敏并实现异步写入日志文件 大概思路是需要自己写脱敏转换器然后引入logback.xml中异步写入文件比较方便网上好多资料大家可以自行查询。 脱敏转换器 package com.lsl.config;import ch.qos.logback.classic.pattern.MessageConverter; import ch.qos.logback.classic.spi.ILoggingEvent; import org.apache.commons.lang3.StringUtils;import java.util.regex.Matcher; import java.util.regex.Pattern;public class SensitiveConverter extends MessageConverter {//手机号正则private static final String PHONE_REG (1([358][0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}|[96]\\d{7}|6[68]\\d{5}|09\\d{8})([^^\\d]|$);//身份证号正则private static final String IDCARD_REG ;//脱敏字符private static final String SECRET ***************;//要脱敏的类型private static String sensitiveType;public static void setSensitiveType(String sensitiveType){SensitiveConverter.sensitiveType sensitiveType;}Overridepublic String convert(ILoggingEvent event){String requestLogMsg event.getFormattedMessage();return filtrSensitive(requestLogMsg,sensitiveType);}public String filtrSensitive(String content,String sensitiveType){try {if (StringUtils.isBlank(content)){return content;}//手机号脱敏if (sensitiveType.contains(phone)){content filterPhone(content);}//身份证脱敏if (sensitiveType.contains(idcard)){}return content;} catch (Exception e) {return content;}}private static String filterPhone(String num){Pattern pattern Pattern.compile(PHONE_REG);Matcher matcher pattern.matcher(num);StringBuffer sb new StringBuffer();while (matcher.find()){String matchResult matcher.group();if (!StringUtils.isNumeric(matchResult.substring(matchResult.length() - 1))){//大陆手机号if (matchResult.startsWith(1)){matcher.appendReplacement(sb,baseSensitive(matchResult,3,5));}//港澳手机号if (matchResult.startsWith(6) || matchResult.startsWith(9)){}}else {//大陆手机号if (matchResult.startsWith(1)){matcher.appendReplacement(sb,baseSensitive(matchResult,3,4));}//港澳手机号if (matchResult.startsWith(6) || matchResult.startsWith(9)){}}}matcher.appendTail(sb);return sb.toString();}private static String baseSensitive(String str,int startlen,int endlen){if (StringUtils.isBlank(str)){return ;}StringBuffer sb new StringBuffer();sb.append(SECRET);return StringUtils.left(str,startlen).concat(StringUtils.leftPad(StringUtils.right(str,endlen),str.length()- startlen,sb.toString()));}}package com.lsl.config;import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component;Component public class SensitiveConverterProperties implements InitializingBean {Value(${logging.sensitive.type})private String sensitiveType;Overridepublic void afterPropertiesSet() throws Exception {SensitiveConverter.setSensitiveType(this.sensitiveType);}public String getSensitiveType() {return sensitiveType;}public void setSensitiveType(String sensitiveType) {this.sensitiveType sensitiveType;} }application.properties文件 server.port8080logging.sensitive.typephonelogback.xml ?xml version1.0 encodingUTF-8? configuration debugfalse!-- 转换配置 必选配置--conversionRule conversionWordsensitiveMsg converterClasscom.lsl.config.SensitiveConverter /conversionRule!-- 控制台输出 --appender nameCONSOLE classch.qos.logback.core.ConsoleAppenderencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %sensitiveMsg%n/pattern/encoder/appender!-- 按照每天生成日志文件 --appender nameROLLING classch.qos.logback.core.rolling.RollingFileAppenderfilelogs/app.log/filerollingPolicy classch.qos.logback.core.rolling.TimeBasedRollingPolicyfileNamePatternlogs/app.%d{yyyy-MM-dd}.log/fileNamePatternmaxHistory30/maxHistory/rollingPolicyencoderpattern%d{yyyy-MM-dd HH:mm:ss} [%thread] %-5level %logger{36} - %sensitiveMsg%n/pattern/encoder/appender!-- 异步日志配置 --appender nameASYNC_FILE classch.qos.logback.classic.AsyncAppenderappender-ref refROLLING //appender!-- 项目包下所有info日志输出到控制台 --logger namecom.lsl levelINFO additivityfalseappender-ref refCONSOLE //logger!-- 项目包下所有info日志异步输出到文件 --logger namecom.lsl levelINFO additivityfalseappender-ref refASYNC_FILE //logger!-- Root Logger --root levelINFOappender-ref refCONSOLE /appender-ref refROLLING //root /configurationcontrooler验证 package com.lsl.controller;import com.lsl.vo.User; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody;Controller RequestMapping(/lsl) public class LogbackTestController {private static final Logger LOG LoggerFactory.getLogger(LogbackTestController.class);PostMapping(value qryUser, produces application/json;charsetUTF-8)ResponseBodypublic String qryUser(){User user new User();user.setUserName(LSL);user.setUserPwd(123asd);user.setUserAddr(北京海淀);user.setUserAge(21);user.setUserTel(15803125588);LOG.info(用户信息{},user.toString());return success;} }验证截图 总结 利用logback的脱敏转换器是非常方便且灵活的。自己可以定义各种业务敏感信息的脱敏策略我这里面只写了手机号的脱敏策略。而且在配置文件properties中可以配置对那些敏感信息进行脱敏。 比如logging.sensitive.typephone,idcard 这样就是手机号和身份证号同时进行脱敏只是具体的身份证号的脱敏规则我以后在补上吧。
http://www.hkea.cn/news/14568145/

相关文章:

  • 建设网站需要什么要求江苏定制网站建设费用
  • 怎样加入网站跨国网站怎么做
  • 济南网站制作公司哪家好网站域名注册流程
  • 非盈利性备案网站 淘宝客网站视频模板网
  • da面板做两个网站简约网站内容布局
  • 厦门模板建站系统网站开发项目挣钱吗
  • 怎么制作网站源码苏州网页设计方法
  • 做图去哪个网站找素材专门做鞋子的网站有哪些
  • 酒仙网网站推广方式类似设计师联盟的网站
  • 网站建设什么原因最主要制作个人网站实例
  • 优秀网站建设评选活动海报汕头seo优化项目
  • 网站开发 需求调研做网站ui
  • 福田做网站哪家专业怎么建立一个网站让外国人浏览
  • 做网站哪个软件好wordpress分类目录前缀
  • 中文网站站内优化怎么做网站建设收费分几次
  • 网站seo优化书籍怎样制作网页链接教程
  • 做网站 淘宝烟台网站建设seo
  • 广州商城建站系统外贸网站建设网站
  • 怎样建立一个企业网站天津手网站开发
  • 网站建设的技术亮点酒店协会网站集静态模板
  • 网站seo优化加推广支付宝小程序代理
  • 邮件模板网站怎么做好手机网站开发
  • 网页制作与网站设计思路wordpress电影站
  • 做网站教程流程网络营销策略4p4c
  • 微信官方网站首页域名服务费多少钱一年
  • 手机微网站第二年续费吗哪个平台推广效果最好
  • 郑州做网站公做的最好的相亲网站有哪些
  • 无锡网站维护公司哪个网站百度收录快
  • 建设网站基本思路网络广告投放平台
  • 网站域名会赠送几个邮箱企业网站建设绪论