Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在服务器中存储值-JavaSpring引导_Java_Spring_Spring Boot_Api_Server - Fatal编程技术网

在服务器中存储值-JavaSpring引导

在服务器中存储值-JavaSpring引导,java,spring,spring-boot,api,server,Java,Spring,Spring Boot,Api,Server,因此,我正在使用Spring Boot开发我的第一个API。此API调用和端点,并使用令牌对向其发出的请求进行身份验证。我想知道是否有任何方法可以在服务器中存储变量,这样我就可以访问对我的API发出的任何请求。我要存储的值是该端点提供的令牌,它在短时间内有效,当它过期时,我可以发出另一个请求以获取新的令牌 提前谢谢 您应该使用JWT身份验证来保护您的API。 见此。正如评论中指出的,您最好使用缓存(首选)或数据库。但如果这不可能,您总是可以使用一些内存中的解决方案,这些解决方案会带来自身的风险,

因此,我正在使用Spring Boot开发我的第一个API。此API调用和端点,并使用令牌对向其发出的请求进行身份验证。我想知道是否有任何方法可以在服务器中存储变量,这样我就可以访问对我的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