如何解决我可以从 c# 9 记录的自动生成方法中隐藏敏感属性值吗?
我正在构建一个用户管理系统,其中包含一个向其发送命令的域主机。这些命令都是 record
,因为只有 init
的属性和生成的辅助方法。但是,我很快就遇到了这种方法的问题,例如LoginUserCommand
。
command.ToString()
返回如下内容(添加格式):
LoginUserCommand {
Identity = 10000000-1111-2222-3333-444444444444,CorrelationId = 20000000-1111-2222-3333-444444444444,Timestamp = 2013-07-26T16:45:20Z,IssuingUserId = 30000000-1111-2222-3333-444444444444,EntityId = a80c081c-cf91-4304-9baa-20fb20c8d9f7,IPAddress = 127.0.0.1,Password = ThisIsAPr0blem
}
显然我可以通过例如解决这个问题在重要的类上覆盖 ToString()
。天真地,我可能会做类似的事情
public override string ToString()
{
return base.ToString()
.Replace(Password,"********");
}
但我想知道我是否忽略了让生成的 ToString()
方法屏蔽 Password
属性值的一些内置方法。
解决方法
您可以使用 with
语法重新映射您的记录并改用 PrintMembers
,我认为这更简洁:
public override string ToString()
{
var builder = new StringBuilder();
(this with { Password = null }).PrintMembers(builder);
return builder.ToString();
}
也有 proposals 用于为记录引入诸如 [PrintMembersIgnore]
之类的属性,但没有实现类似的功能。然而,它可以通过代码生成解决,这是 dotnet 团队建议的方法(请参阅线程中的评论),project for this 已启动。
在服务器和客户端之间传输期间保护机密的一种非常常见的方法是使用加密连接。您可以使用 TLS/HTTPS 通过获取服务器证书来实现此目的。
这样客户端和服务器之间的任何人都无法读取密码,因为他们看到的只是加密数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。