使用 log4j 在日志记录期间屏蔽敏感信息

要确保详细日志消息不显示敏感信息 (例如 CVV 代码) ,请配置 log4j 实用程序以过滤日志消息。

关于此任务

例如,缺省情况下,会屏蔽安全认证代码的值。 缺省情况下,将添加以下 logFilter 属性以将其屏蔽:
filterset.paymentFilter.pattern.1=(SecureAuthenticationCode=)(["'][^"']+["'])
filterset.paymentFilter.pattern.2=(&secureAuthenticationCode=)([^&]+[&])
filterset.paymentFilter.pattern.3=(&secureAuthenticationCode=)([^&]+)$	
filterset.paymentFilter.replace.1=$1"***"
filterset.paymentFilter.replace.2=$1***
filterset.paymentFilter.replace.3=$1***

Sterling™ Order Management为 log4j 布局和过滤器提供了默认实现。 布局实施为 com.sterlingcommerce.woodstock.util.frame.logex.SCIFilteredPatternLayout.class,过滤器实施为 com.sterlingcommerce.woodstock.util.frame.logex.SCIPatternFilter.class

布局实施先将日志消息传递给标准 PatternLayout (org.apache.log4j.PatternLayout.class),以获取格式化的消息。 当接收到格式化的消息时,它会根据一组可配置的正则表达式来过滤结果,然后最终返回固定字符串。 可针对每个正则表达式模式提供一个替换字符串,如果未提供,那么匹配文本将替换为缺省替换字符串。

通过过滤器实施,您可以根据一组正则表达式来匹配消息,如果匹配,那么会将其屏蔽。 Sterling Order Management System 提供了具有各种追加器规范的缺省 log4j 配置 XML。

要在记录时屏蔽敏感信息,请执行以下操作:

过程

  1. <runtime_sandbox>/resources/log4jconfig.xml 文件复制为 <runtime_sandbox>/resources/extn/log4jconfig_custom.xml
  2. 识别相关日志记录文件的正确追加器,将布局类名更改为 SCIFilteredPatternLayout ,并按如下所示命名过滤器:
    <layout class="com.sterlingcommerce.woodstock.util.frame.logex.SCIFilteredPatternLayout">
    	<param name="ConversionPattern" value="%d:%-7p:%t: %-60m[%X{AppUserId}]: %-25c{1}%n"/>
    	<param name="FilterSet" value="<layout_filterSet_name>"/>
    </layout>
  3. 将过滤器类名更改为 SCIPatternFilter ,并按如下所示命名过滤器:
    <filter class=”com.sterlingcommerce.woodstock.util.frame.logex.SCIPatternFilter” >
    	<param name="FilterSet" value="<filter_filterSet_name>" />
    </filter>
  4. 通过覆盖 <runtime_sandbox>/properties/customer_ overrides.properties 文件的 logfilter.properties 文件中提供的属性来定义过滤器。
    Sterling Order Management System 提供了 logfilter.properties 属性文件,用于将过滤器定义为一组指定的正则表达式。 每个属性采用以下格式:
    filterset.<layout_filterSet_name>.pattern.<num>=<pattern string>
    filterset.<layout_filterSet_name>.replace.<num>=<replace string>
    filterset.<filter_filterSet_name>.pattern.<num>=<pattern string>

    pattern 属性是 Java 样式的正则表达式,它定义了要用于匹配消息字符串的正则表达式。 replace 属性是可选属性,它定义了要用于替换匹配表达式的内容。 如果未定义 replace 属性,那么将使用缺省替换字符串 **FILTERED*。 此属性在过滤器运行期间不起作用。

    注: 过滤仅适用于使用提供的日志框架 (包括 YFCLogCategoryLogService) 记录的消息。 通过其他方法(例如,直接 System.out 或其他日志框架)记录的消息不受影响。
    Sterling Order Management System 还提供了以下两个额外属性,这些属性支持缺省 FilterSet 名称,以便它适用于引用缺省布局和过滤器实现的所有追加器。
    default.layout.filterset=<defaut layout filterSet name>default.filter.filterset=<default filter filterSet name>