Java 固定Logback SMTPAppender

Java 固定Logback SMTPAppender,java,security,logging,logback,smtpappender,Java,Security,Logging,Logback,Smtpappender,目前,我的logback.xml配置文件中有以下声明: <appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender"> <smtpHost>my-smtp-host</smtpHost> <to>john.smith@example.com</to> <from>no-reply@exa

目前,我的
logback.xml
配置文件中有以下
声明:

<appender name="logManager-smtpAppender" class="ch.qos.logback.classic.net.SMTPAppender">
    <smtpHost>my-smtp-host</smtpHost>
    <to>john.smith@example.com</to>
    <from>no-reply@example.com</from>
    <username>my_user</username>
    <password>my_password</password>
    <subject>%logger{20} - %m</subject>
    <layout class="ch.qos.logback.classic.html.HTMLLayout"/>
    <cyclicBufferTracker class="ch.qos.logback.core.spi.CyclicBufferTracker">
        <bufferSize>1</bufferSize>
    </cyclicBufferTracker>
</appender>

我的smtp主机
厕所。smith@example.com
没有-reply@example.com
我的用户
我的密码
%记录器{20}-%m
1.

这很好,但我讨厌它迫使我将用户名/密码指定为明文。理想情况下,我希望能够从keystore/realm/DB读取用户名和密码,而不是将其硬编码到XML文件中。有什么补救办法吗?还有其他想法吗?提前谢谢

Logback允许您从JNDI上下文中提取邮件会话。否则,如果您的安装允许,那么很容易对SMTPAppender进行子类化并添加您需要的内容。我怀疑您可以简单地用自己的实现覆盖getUsername()和getPassword()方法。谢谢@DariusX。(+1)-能否提供一个从JNDI上下文中提取邮件会话的工作示例?或者,如果您希望将
SMTPAppender
子类化,您可以提供一个示例吗?对于这个选项,我担心Joran仍然会在
logback.xml
文件中查找
字段……再次感谢!您可以保留XML的原样,只需在其中添加一些虚拟信息。在您的子类中,只需重写getUsername()和/或getPassword()即可执行任何您想要的操作。如果您打算使用现有的类变量作为用户名和密码,还可以重写setUsername()和setpassword(),使它们不做任何事情。不用说,如果自定义代码中包含用户ID或类似的内容,那么您可能只是在用一个漏洞替换另一个漏洞。毕竟,如果您假设有人可以看到您的logback.xml,那么他们可能可以看到您机器上的所有内容,甚至可以反编译您的自定义代码。