我使用logback的DBAppender将我的日志存储到oracle数据库中。我还希望通过加密和解密我的密码来为我的登录凭据添加安全性。所以我推荐了一个java库 jasypt 。我的问题很少,而且我无法访问http://jasypt.org/ 太
感谢任何帮助。
答案 0 :(得分:1)
这是一个迟到的答案,并未涵盖所有问题。但我想分享我的解决方案,以防其他任何人在这里绊倒。至于我,我使用LogBack将日志存储在我的MySQL数据库中。我想这没有区别,如果你使用Oracle或其他东西,因为连接是通过jdbc和jasypt解密完成的。我假设你知道如何使用jdbc和jasypt。
这是我的示例logback.xml:
<configuration>
<appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
</encoder>
</appender>
<appender name="db" class="ch.qos.logback.classic.db.DBAppender">
// important!! Deliver your own class
<connectionSource class="com.company.project.Connector">
<driverClass>com.mysql.jdbc.Driver</driverClass>
// nothing more to provide here
</connectionSource>
</appender>
<logger name="com.company" level="ALL"/>
<root level="WARN">
<appender-ref ref="stdout"/>
<appender-ref ref="db"/>
</root>
这是示例Connector类:
// Important to extend DriverManagerConnectionSource
public class Connector extends DriverManagerConnectionSource {
/**
* Overrides: getConnection() in class DriverManagerConnectionSource
*/
@Override
public Connection getConnection() {
// I am loading the properties from the resources foler
try (final InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("client.properties")) {
final EnvironmentPBEConfig config = new EnvironmentPBEConfig();
final StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
final Properties props = new EncryptableProperties(encryptor);
props.load(inputStream);
config.setAlgorithm("<algorithm>");
config.setPassword("<jasypt encryption password>");
encryptor.setConfig(config);
return DriverManager.getConnection(String.format("jdbc:mysql://%s/%s?user=%s&password=%s",
props.getProperty("<ip>"),
props.getProperty("<db_name>"),
props.getProperty("<user>"),
props.getProperty("<pw>")));
} catch (IOException | SQLException e) {
e.printStackTrace();
}
return null;
}
}
请注意,如果有人获得您的jasypt密码和加密值,那么每次加密都是无用的。任何人都可以通过谷歌搜索来解密它。
答案 1 :(得分:0)
您可以参考custom-environment,作者提供了一种解决此问题的方法(在应用程序运行之前解密spring属性)
new SpringApplicationBuilder()
.environment(new StandardEncryptableEnvironment())
.sources(YourApplicationClass.class).run(args);