2

您建议在 Spring MVC 应用程序中(或实际上在任何其他 JAVA Web MVC 应用程序中)存储自定义敏感数据?假设我有一个 API 密钥,我需要它可用于我的控制器。我可以考虑的几种解决方案:

1-使用静态类:

public final static String API_KEY = "my-api-key";

2-使用上下文参数(web.xml):

<context-param>
    <param-name>apiKey</param-name>
    <param-value>my-api-key</param-value>
</context-param>

3-使用自定义.properties文件:

apiKey=my-api-key

4-使用自定义.xml文件:

<entry key="apiKey">my-api-key</entry>

5-您可能有的任何其他想法/解决方案:)

谢谢。

4

3 回答 3

2

如果您对任何开发人员/管理员都可以看到密钥感到高兴,上述任何一项似乎都很好。您也可以将其存储在数据库、目录等中。

这对于用户密码是不可接受的,因为没有人应该能够看到这些密码。密码最好存储为单向哈希 - 我不是安全专家,但我相信 md5 被认为是弱的,其他人推荐使用 SHA-256 之类的东西。

您可能应该考虑的其他事项是:

  • 文件/目录权限(哪些用户/组可以读/写文件)
  • 是否需要通过网络加密(在这种情况下,您需要公钥/私钥)
于 2012-04-26T08:25:48.140 回答
1

如果您使用的是 spring-framework,我建议您使用jasypt库。我允许您加密某些属性并将主密码外部化到注册表或其他位置。

走这条路时,还建议在您的应用程序外部有一个属性文件,客户端可以在其中放置其加密属性,这些属性覆盖您的应用程序提供的默认值。

于 2012-04-26T08:40:06.907 回答
1

取决于您需要该信息的安全程度。

在您列出的选项中,我相信选项(1)

public final static String API_KEY = "my-api-key";

相对安全,因为 java 文件被编译为类文件,并且快速检查您的发行版不会让任何人看到 api-key,但缺点是它是硬编码的,如果不重新编译就无法更改它。

我建议在代码中使用硬编码密码,然后使用 DES 之类的东西加密密钥。然后可以将加密的密钥存储为属性文件或其他文件。

于 2012-04-26T08:45:49.797 回答