Проблема Oracle21/Java 20/HikariCP sys_context

После недавнего обновления с Oracle 12c/java 8 мы обнаружили, что сеанс пользователя мешает сеансу другого пользователя, т.е. при входе в систему пользователь устанавливает свои учетные данные (ID) для сеанса другого пользователя.

Необходимые данные о настройках проекта:

Источник данных Хикари:

      driver-class-name: oracle.jdbc.driver.OracleDriver
    hikari:
      connection-timeout: 300000
      idleTimeout: 300000
      minimum-idle: 10
      maximumPoolSize: 20
      pool-name: DL_CONNECTION
      leak-detection-threshold: 600000

pom.xml

Пример настройки пользователя из JWT:

      SomeLogic.java

public class SomeClass {

private final HikariDataSource hds;
private final JwtTokenUtil jwt;

  ////logic here

  conn = hds.getConnection();
  jwt.sendTokenDB(conn, req);

  ////logic there
}

------------------------------------------------------

JwtTokenUtil.java

import io.jsonwebtoken.Jwts;
.........

@Component
public class JwtTokenUtil implements Serializable {
  ////code here

  public Claims getAllClaimsFromToken(String token) {
    return Jwts.parser()
      .setSigningKey(secret)
      .parseClaimsJws(token)
      .getBody();
  }

  public User getUserFromToken(HttpServletRequest req) {
    User user = new User();
    Claims data = getAllClaimsFromToken(getToken(req));
    user.setLogId(Integer.parseInt(data.get("log_id").toString()));
    user.setUserId(Integer.parseInt(data.get("user_id").toString()));
    user.setLogin(data.get("login").toString());
    user.setFilial(data.get("filial").toString());
    user.setRoles((List<Roles>) data.get("roles"));
    return user;
  }

  public void sendTokenDB(Connection conn, HttpServletRequest req) throws Exception {
    User user = getUserFromToken(req);
    DB.ps(conn, "Begin Core_Env.Set_Env('LOG_ID', '" + user.getLogId() + "'); End;");
    DB.ps(conn, "Begin Core_Env.Set_User(" + user.getUserId() + "); End;");
  }
  
  ////code there
}

Если предоставленных данных недостаточно, мы с радостью уточним. Спасибо за ваше время.

0 ответов

Другие вопросы по тегам