当前位置: 首页 > 知识库问答 >
问题:

如何在spring集成框架中屏蔽敏感信息

杜霍英
2023-03-14

我需要在登录时屏蔽敏感信息。我们使用集成框架提供的wire-tap进行日志记录,我们已经设计了许多接口,这些接口使用wire-tap进行日志记录。我们目前正在使用spring boot 2.1和spring集成。

共有2个答案

钱稳
2023-03-14

我不知道这是否是一种花哨的方法,但我最终实现了某种“错误消息过滤器”,以屏蔽存在敏感标题的情况下的标题(这可以扩展到多个标题名称,但这给出了一个想法):

@Component
public class ErrorMessageFilter {

    private static final String SENSITIVE_HEADER_NAME = "sensitive_header";

    public Throwable filterErrorMessage(Throwable payload) {
        if (payload instanceof MessagingException) {
            Message<?> failedMessage = ((MessagingException) payload).getFailedMessage();
            if (failedMessage != null && failedMessage.getHeaders().containsKey(SENSITIVE_HEADER_NAME)) {
                MessageHeaderAccessor headerAccessor = new MessageHeaderAccessor(failedMessage);
                headerAccessor.setHeader(SENSITIVE_HEADER_NAME, "XXX");
                return new MessagingException(withPayload(failedMessage.getPayload()).setHeaders(headerAccessor)
                        .build());
            }
        }
        return payload;
    }

}

然后,在@Configuration类中,添加了一种将我的过滤器与Spring Integration的LoggingHandler连接起来的方法:

    @Autowired
    public void setLoggingHandlerLogExpression(LoggingHandler loggingHandler, ErrorMessageFilter messageFilter) {
        loggingHandler.setLogExpression(new FunctionExpression<Message<?>>((m) -> {
            if (m instanceof ErrorMessage) {
                return messageFilter.filterErrorMessage(((ErrorMessage) m).getPayload());
            }
            return m.getPayload();
        }));
    }

这也让我能够灵活地在处理错误消息的其他组件中重用我的过滤器(例如:向Zabbix发送错误通知等)。

附言:抱歉所有的实例ifs,但在某些层脏代码必须开始。

宗政永望
2023-03-14

我希望您的所有集成流都能通过所提到的全球单一有线点击记录。

无论如何,这只是另一个集成流的开始:它不仅仅是一个通道和它上的记录器。您真的可以构建任何复杂的有线接入流。

我的观点是,您可以在记录通道适配器之前添加转换器,并以任何需要的方式屏蔽有效负载和/或标题。记录器将接收已屏蔽的数据。

另一种方法是在log-表达式中使用一些掩码功能。您可以在这里调用一些bean进行掩码或静态实用程序:https://docs.spring.io/spring-integration/reference/html/#logging-channel-adapter

 类似资料:
  • 我需要能够在事件中搜索多种模式中的任何一种,并用掩码值替换模式中的文本。这是我们应用程序中的一项功能,旨在防止敏感信息落入日志。由于信息可能来自各种来源,因此对所有输入应用过滤器是不切实际的。除了日志记录之外,toString()还有其他用途,我不希望toString()对所有调用(仅日志记录)进行统一屏蔽。 我尝试在logback中使用%替换方法。xml: 这是成功的(在用字符实体替换尖括号之后

  • 使用CXF调用SOAP Web服务后,CXF客户端记录SOAP请求消息,密码可见!我想从CXF客户端日志记录中隐藏密码等敏感数据。 以下是我在日志中得到的信息: 我只想将mypassword替换为code 我尝试了此解决方案,但它与我的CXF版本不兼容,因为它使用的是旧版本的CXF。 我真的看到了很多例子,一些扩展了LoggingOutInterceptor,其他扩展了AbstractSoapIn

  • 本文向大家介绍Spring集成MyBatis框架,包括了Spring集成MyBatis框架的使用技巧和注意事项,需要的朋友参考一下 Java在写数据库查询时,我接触过四种方式: 1、纯Java代码,引用对应的数据库驱动包,自己写连接与释放逻辑(可以用连接池) 这种模式实际上性能是非常不错的,但是使用起来并不是非常方便:一是要手工为Connection做获取与释放,大量的冗余代码也容易出错;另一个是

  • 问题内容: 我已经开发了一个Spring / JPA应用程序: 服务,存储库和域层即将完成 。 该 所缺的只是层是网络层 。我正在考虑将Playframework 2.0用于Web层,但不确定是否可以 在Playframework 2.0类中注入/使用spring bean 。 这可能吗?如果可以,怎么办? 问题答案: 您可以。已针对Play 2.5.x更新: https://github.com

  • 本文向大家介绍PHP中使用strpos函数实现屏蔽敏感关键字功能,包括了PHP中使用strpos函数实现屏蔽敏感关键字功能的使用技巧和注意事项,需要的朋友参考一下 现在网络信息监管很严格,特别是屏蔽关键字。特别是现在WEB2.0时代,网站的内容几乎都是来自网民发布,站长管理即可。如果你希望别人在你站点禁止发布某个关键字,那么就需要预先做处理。用PHP做关键字屏蔽的功能样式有多种多样,如正则是最普遍

  • 我的网站上有一个表格,我的客户用这个表格给我发信息。有时他们会在信息上写上他们的信用卡号。所以这真的很关键。我想掩盖这些信用卡号。但是当然卡号不会定期出现。 例1:1111222233334444 例2:4444 3333 2222 1111 例3:4444-3333-2222-1111 例4:4444-3333-2222-1111 例5:4444-3333-2222-1111 所以我可以屏蔽例如