在SQL日志中屏蔽9位数的SSN编号

时间:2019-03-14 08:33:41

标签: java masking

我们只需要在sql日志文件中屏蔽SSN(9位数),而无需订购号(9位数)。 有一个问题-数字(123456789)可以是SSN,也可以是订单号都没有。我们如何区分两者,以便一个被屏蔽而另一个未被屏蔽。

还有另一个问题-sql日志不是由我们创建的,它们是由我们正在使用的jar的内置类创建的,让我解释一下我要说的意思。

Log4j.xml代码在下面

<appender name="SQL_logfile" class="org.apache.log4j.DailyRollingFileAppender">
    <param name="File" value="../logs/sql.log" />
    <layout class="CustomFilterLayout;">
        <param name="ConversionPattern" value="[%d{ISO8601}{CST}] [%p] [%X{ipAddress}] [%X{userID}] [%t] [%c] - %m%n" />
    </layout>
</appender>

<appender name="async_SQL_logfile" class="org.apache.log4j.AsyncAppender">       
    <appender-ref ref="SQL_logfile"/>
</appender>

<logger name="java.sql" additivity="false">
    <level value="DEBUG" />
    <appender-ref ref="async_SQL_logfile" />             
</logger>

DAO文件代码在下面

public List<TestDelivery> getTestDelivery(long SSN, long orderNo)
{   
    List<TestDelivery>  testDeliveryList = new ArrayList<>();
    Map<String, Object> params = new HashMap<>();
    params.put("SSN", SSN);
    params.put("orderNo", orderNo);
    try {
        testDeliveryList = (List<TestDelivery>) getSqlMapClientTemplate().queryForList("getTestDelivery", params);
    } catch(Exception e) {

    }
    return testDeliveryList;
}

问题在于,写入的日志是由我们无法控制的getSqlMapClientTemplate类自动完成的,并且日志如下打印

Params -> (SSN,123456789),(orderNo,123456789)

但是我们希望按以下方式打印日志,并且我们无法屏蔽DAO类getTestDelivery方法中参数中发送的SSN值,因为传递了该值以获取TestDelivery List。我们只希望在SSN中屏蔽日志。

Params -> (SSN,#########),(orderNo,123456789)

0 个答案:

没有答案