后端三郎@ZYJ 2024-07-19 16:18 采纳率: 33.3%
浏览 8

springmvc 集成jasypt如何集成,动态获取密钥

springmvc 集成jasypt如何集成,动态获取密钥

@Configuration
public class kms {

    @Bean(name = "jasyptStringEncryptor")
    public StandardPBEStringEncryptor configurationEncryptor() {
        System.out.println("加密开始编译=====================================");
        StandardPBEStringEncryptor encryptor = new StandardPBEStringEncryptor();
        encryptor.setPassword("123456");
        return encryptor;
    }
}

<bean class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
        <!-- 指定属性文件的位置 -->
        <property name="locations">
            <list>
                <!-- 这里可以指定多个属性文件,路径可以是类路径下的,也可以是文件系统中的 -->
                <value>classpath:jdbc.properties</value>
                <!-- 如果还有其他属性文件,可以继续添加 <value> 标签 -->
            </list>
        </property>
        <!-- 可选:配置是否忽略无法解析的占位符,默认为 false -->
    </bean>

    <bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource"  destroy-method="shutdown">

        <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
        <property name="username" value="${username}"></property>
        <property name="password" value="${password}"></property>

username=ENC(456745745674567456756)
password=ENC(sdfgsdgfsdfgsdgsdfgsdfgs)

这样做对么,一直提示 Access denied for user '17801'@'171.403.214.223' (using password: YES)

  • 写回答

4条回答 默认 最新

  • 阿里嘎多学长 2024-07-19 16:18
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    你已经列出了一个很好的问题解决计划,下面是一些建议和步骤,帮助你完成Spring MVC项目中Jasypt的集成和动态获取加密密钥:

    1. 集成Jasypt到Spring MVC:

      • 你已经创建了一个配置类并定义了StandardPBEStringEncryptor的Bean。这是正确的第一步。
    2. 动态获取加密密钥:

      • 为了动态获取密钥,你可以考虑使用Spring的@Value注解来注入环境变量或配置文件中的密钥值。例如:
        @Value("${jasypt.encryptor.password}")
        private String jasyptPassword;
        
      • 然后在StandardPBEStringEncryptor的配置中使用这个变量:
        encryptor.setPassword(jasyptPassword);
        
    3. 配置属性文件和数据源:

      • 你已经使用了PropertySourcesPlaceholderConfigurer来指定属性文件的位置。确保你的属性文件(例如jdbc.properties)位于指定的路径下。
    4. 解决数据库访问权限问题:

      • 检查数据库用户17801的权限,确保它有权限访问数据库。你可能需要联系数据库管理员或检查数据库的权限设置。
    5. 处理加密的数据库连接信息:

      • 你需要确保Jasypt在启动时能够解密jdbc.properties中的加密字段。这可以通过实现PropertySourcesPlaceholderConfigurerconvertProperty方法来实现。
    6. 实现解密逻辑:

      • 你可以创建一个自定义的PropertyEditorConverter来实现解密逻辑。例如:
        @Component
        public class EncryptedPropertyEditor extends PropertyEditorSupport {
        
            @Autowired
            private StandardPBEStringEncryptor encryptor;
        
            @Override
            public void setAsText(String text) {
                setValue(encryptor.decrypt(text));
            }
        }
        
      • 然后,你可以在PropertySourcesPlaceholderConfigurer中使用这个自定义编辑器:
        <bean class="org.springframework.beans.factory.config.CustomEditorConfigurer">
            <property name="customEditors">
                <map>
                    <entry key="java.lang.String">
                        <bean class="com.yourpackage.EncryptedPropertyEditor"/>
                    </entry>
                </map>
            </property>
        </bean>
        
    7. 测试和验证:

      • 在完成上述步骤后,确保进行充分的测试,验证所有的配置是否正确,并且Jasypt能够正确地解密属性文件中的值。

    请注意,上述代码示例仅供参考,你可能需要根据你的项目结构和配置进行调整。如果你需要更详细的帮助或示例代码,请随时提问。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月19日

悬赏问题

  • ¥50 我在一个购物网站的排队系统排队,这个排队到号后重新定向到目标网站进行购物,但是有技术牛通过技术方法直接跳过排队系统进入目标网址购物,有没有什么软件或者脚本可以用
  • ¥15 ios可以实现ymodem-1k协议 1024字节传输吗?
  • ¥300 寻抓云闪付tn组成网页付款链接
  • ¥15 请问Ubuntu要怎么安装chrome呀?
  • ¥15 视频编码 十六进制问题
  • ¥15 unity terrain打包后地形错位,跟建筑不在同一个位置,怎么办
  • ¥15 FileNotFoundError 解决方案
  • ¥15 uniapp实现如下图的图表功能
  • ¥15 u-subsection如何修改相邻两个节点样式
  • ¥30 vs2010开发 WFP(windows filtering platform)