我正在使用Rest EJB创建Project.当我尝试在Jboss上部署时抛出错误
我正在使用jboss standalone进行数据库配置
12:14:06,358 INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 70) JBAS011410: Stopping Persistence Unit (phase 2 of 2) Service 'webservice.war#webUnit'
12:14:06,359 INFO [org.jboss.weld.deployer] (MSC service thread 1-3) JBAS016009: Stopping weld service for deployment webservice.war
12:14:06,370 INFO [org.jboss.as.jpa] (ServerService Thread Pool -- 70) JBAS011410: Stopping Persistence Unit (phase 1 of 2) Service 'webservice.war#webUnit'
12:14:06,383 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015877: Stopped deployment webservice.war (runtime-name: webservice.war) in 30ms
12:14:06,383 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) JBAS015876: Starting deployment of …Run Code Online (Sandbox Code Playgroud) 我正在使用JWT令牌来实现Rest API的安全性。
登录用户后,使用DB检查用户的凭据。
如果匹配,我们将对其加密以进一步提高安全性,然后将其传递给jwt以创建令牌
现在,为了匹配用户的令牌,我们需要将密码保留在某处,以便我们可以在用户登录后发送任何请求时匹配它们。
我们可以通过2种方式做到这一点:1.在数据库中保存详细信息,每次触发rest调用时,都要检查Database中带有Token的令牌,这对于每个rest调用来说都太昂贵了。2.在JVM的某个地方保留秘密并使用它。在这里,我尝试了HttpSession从包
javax.servlet.http.HttpServletRequest
//我的关键发布代码
// Encrypt it
Key key = keyGenerator.generateKey(password);
jwtToken = Jwts.builder()
.setSubject(username)
.setIssuer(uriInfo.getAbsolutePath().toString())
.setIssuedAt(new Date())
.setExpiration(toDate(LocalDateTime.now().plusMinutes(1)))
.signWith(SignatureAlgorithm.HS512, key)
.compact();
Run Code Online (Sandbox Code Playgroud)
//向会话添加详细信息
HttpSession httpSession = currentRequest.getSession();
httpSession.setAttribute("userSecret", password)
Run Code Online (Sandbox Code Playgroud)
这对于单个Server实例运行正常。
但是在某些时候,我们需要扩展并运行多个服务器实例。
如果用户可能使用1个实例登录并且可能使用负载平衡使用另一个实例为rest呼叫提供服务,我们将如何处理这种情况。
由于用户机密仅在第一台服务器的JVM中可用。