我需要在日志文件中的几个字段被屏蔽。像信用卡信息或密码。我们有任何直接的方法来做到这一点吗?或任何代码块,我们必须写在日志字段来屏蔽这些信用卡信息,使这些将appreaed掩码在日志文件中。例如:信用卡号:411111111111应在日志文件中显示为**********1111密码密码123应在日志中显示为***********我使用log4j将信息写入日志。
vaj7vani1#
您可以通过从log4j切换到Logback并配置日志记录模式来屏蔽Sping Boot 记录的敏感数据。1.使用Logback。它是default logging option of Spring Boot1.在application.properties中定义logging.pattern.file,使用转换字将每个密码替换为掩码:
application.properties
logging.pattern.file
logging.pattern.file=%d %replace(%m){"password='.*'", "password='xxx'"}
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %replace(%m){"password='.*'", "password='xxx'"}%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
5vf7fwbs2#
对于使用spring-ws的SOAP Web服务,我使用了lib:
<groupId>com.github.spartatech</groupId> <artifactId>spring-ws-utils</artifactId>
要使用这个,你应该配置一个拦截器来屏蔽字段。屏蔽是使用XSLT完成的。它的工作方式是(这个例子使用spring XML配置,但是你也可以使用基于Java的配置):配置spring-ws拦截器:
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sws="http://www.springframework.org/schema/web-services" xsi:schemaLocation=" http://www.springframework.org/schema/web-services http://www.springframework.org/schema/web-services/web-services-2.0.xsd > ... <sws:interceptors> <bean class="org.sparta.springwsutils.PayloadTransformedLoggingInterceptor"> <property name="xslt" value="classpath:xslt/maskInput.xslt"/> </bean> </sws:interceptors>
然后创建文件:src/main/resources/xslt/maskInput.xslt此文件将包含用于屏蔽字段的所有XML转换:示例:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:typ="http://your/schema_name" version="1.0"> <!-- copy all document --> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates/> </xsl:copy> </xsl:template> <!-- mask cerditCard --> <xsl:template match="typ:creditCard"> <xsl:copy> <!-- Mask beginning of the Field --> <xsl:value-of select="substring('*****************************************', 1, string-length(.)-4)"/> <xsl:value-of select="substring(.,string-length(.)-3,string-length(.)+1)" /> </xsl:copy> </xsl:template>
然后在日志配置文件中确保禁用MessageTracing日志并启用PayloadTransformedLoggingInterceptor日志记录。
<logger name="org.springframework.ws.client.MessageTracing" level="ERROR"/> <logger name="org.sparta.springwsutils.PayloadTransformedLoggingInterceptor" level="INFO" />
2条答案
按热度按时间vaj7vani1#
您可以通过从log4j切换到Logback并配置日志记录模式来屏蔽Sping Boot 记录的敏感数据。
1.使用Logback。它是default logging option of Spring Boot
1.在
application.properties
中定义logging.pattern.file
,使用转换字将每个密码替换为掩码:logging.pattern.file=%d %replace(%m){"password='.*'", "password='xxx'"}
logging.pattern.file=%d{yyyy-MM-dd HH:mm:ss.SSS} ${LOG_LEVEL_PATTERN:-%5p} ${PID:- } --- [%t] %-40.40logger{39} : %replace(%m){"password='.*'", "password='xxx'"}%n${LOG_EXCEPTION_CONVERSION_WORD:%wEx}
5vf7fwbs2#
对于使用spring-ws的SOAP Web服务,我使用了lib:
要使用这个,你应该配置一个拦截器来屏蔽字段。屏蔽是使用XSLT完成的。它的工作方式是(这个例子使用spring XML配置,但是你也可以使用基于Java的配置):
配置spring-ws拦截器:
然后创建文件:src/main/resources/xslt/maskInput.xslt此文件将包含用于屏蔽字段的所有XML转换:
示例:
然后在日志配置文件中确保禁用MessageTracing日志并启用PayloadTransformedLoggingInterceptor日志记录。