在服务器中存储值-JavaSpring引导
因此,我正在使用Spring Boot开发我的第一个API。此API调用和端点,并使用令牌对向其发出的请求进行身份验证。我想知道是否有任何方法可以在服务器中存储变量,这样我就可以访问对我的API发出的任何请求。我要存储的值是该端点提供的令牌,它在短时间内有效,当它过期时,我可以发出另一个请求以获取新的令牌在服务器中存储值-JavaSpring引导,java,spring,spring-boot,api,server,Java,Spring,Spring Boot,Api,Server,因此,我正在使用Spring Boot开发我的第一个API。此API调用和端点,并使用令牌对向其发出的请求进行身份验证。我想知道是否有任何方法可以在服务器中存储变量,这样我就可以访问对我的API发出的任何请求。我要存储的值是该端点提供的令牌,它在短时间内有效,当它过期时,我可以发出另一个请求以获取新的令牌 提前谢谢 您应该使用JWT身份验证来保护您的API。 见此。正如评论中指出的,您最好使用缓存(首选)或数据库。但如果这不可能,您总是可以使用一些内存中的解决方案,这些解决方案会带来自身的风险,
提前谢谢 您应该使用
JWT
身份验证来保护您的API
。
见此。正如评论中指出的,您最好使用缓存(首选)或数据库。但如果这不可能,您总是可以使用一些内存中的解决方案,这些解决方案会带来自身的风险,比如如何跨不同的JVM维护状态(如果有多个服务器)?
现在我们已经解决了这个问题,让我们看看是否要使用内存中的缓存/数据库来实现这一点 缓存 探索由或类似工具提供的内存缓存实现。 从页面- 通常,Guava缓存实用程序适用于以下情况:
- 您愿意花费一些内存来提高速度李>
- 您预计键有时会被查询多次
- 您的缓存不需要存储超过RAM容量的数据。(番石榴缓存在你的应用程序的单个运行中是本地的。它们不在文件中存储数据,也不在外部服务器上存储数据。如果这不符合你的需要,请考虑一个类似的工具) 。
CacheLoader
在应用程序引导期间加载令牌,每次需要新值时都会调用该令牌
LoadingCache<String, String> tokensByResource = CacheBuilder.newBuilder()
.maximumSize(1000)
.build(
new CacheLoader<String, String>() {
public Token load(String resource) throws AnyException {
return createToken(key);
}
});
数据库
考虑使用Spring Boot支持的内存/嵌入式数据库。如果您不想在服务器重启时丢失数据,可以提供一个文件位置(下文将对此进行详细介绍)。这在调试/报告等方面很有用
添加maven依赖项:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
完成此设置后,将其视为用于CRUD操作的任何其他普通旧SQL数据库。在应用程序初始化过程中,引导令牌生成并将其保存到
H2
您是否有一个DB/缓存来实现这一点?您是否专门试图找到一个解决方案将其保存在内存中?这将部署在云/容器或传统的apache tomcat服务器中?没有数据库。我正在寻找一个类似于会话变量的东西,它在用户之间共享。是的,这将部署在ApacheTomcat服务器上。通常,在实现RESTAPI时,存储状态或使用会话是一种反模式。如果可能的话,我建议从一开始就将API设置为无状态,这样以后可以更容易地进行扩展。我会使用DB并根据用户JWT令牌信息或您正在使用的任何信息查找令牌。我要保存的令牌仅用于向我前面提到的端点发出请求。我需要打电话每X小时更新一次。那么,即使这个表只有一行,也可以保存在表上吗?如果那不是问题,我会做的
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.200</version>
</dependency>
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=password
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
#Use following to preserve data to file between restarts
spring.datasource.url=jdbc:h2:file:/data/demo