Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.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
Java 如何检查是否创建了身份验证令牌并将其保存在cookie中_Java_Hibernate_Rest_Jpa_Cxf - Fatal编程技术网

Java 如何检查是否创建了身份验证令牌并将其保存在cookie中

Java 如何检查是否创建了身份验证令牌并将其保存在cookie中,java,hibernate,rest,jpa,cxf,Java,Hibernate,Rest,Jpa,Cxf,我的要求是,当用户登录时,RESTWeb服务必须发送一个包含userid的cookie,之后他必须创建一个身份验证令牌并将其保存在数据库存储中,并且必须将令牌保存在cookie中。稍后,如果他再次登录,web服务必须检查令牌是否已创建,如果已创建,则从db获取令牌或创建新令牌。您能检查并让我知道身份验证令牌是否安全创建,我的问题是如何检查令牌是否已提前创建,以及如何保存在cookie中 private static byte[] getSalt() throws NoSuchAlgorithmE

我的要求是,当用户登录时,RESTWeb服务必须发送一个包含userid的cookie,之后他必须创建一个身份验证令牌并将其保存在数据库存储中,并且必须将令牌保存在cookie中。稍后,如果他再次登录,web服务必须检查令牌是否已创建,如果已创建,则从db获取令牌或创建新令牌。您能检查并让我知道身份验证令牌是否安全创建,我的问题是如何检查令牌是否已提前创建,以及如何保存在cookie中

private static byte[] getSalt() throws NoSuchAlgorithmException {
    SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
    byte[] salt = new byte[16];
    secureRandom.nextBytes(salt);
    return salt;
}

public static String getHashWithSalt(String userid) {
    String token = null;
    try {
        MessageDigest msgDigest = MessageDigest.getInstance("SHA-256");
        byte[] salt = getSalt();
        msgDigest.reset();
        msgDigest.update(salt);
        msgDigest.update(userid.getBytes());
        byte byteData[] = msgDigest.digest();
        System.out.println("msgDigest value --> " + byteData.toString());
        token = toHexString(byteData);
        System.out.println("token --> " + token);
    } catch (NoSuchAlgorithmException e) {
        e.printStackTrace();
    } 
    return token;
}

// This method converts the byte Array to Hexa String format
private static String toHexString(byte[] byteData) {
    StringBuffer hexString = new StringBuffer();
    for (int i = 0; i < byteData.length; i++) {
        String hex = Integer.toHexString(0xFF & byteData[i]);
        hexString.append(hex);
    }
    return hexString.toString();
}

我不确定我是否正确理解了这个问题:

如何检查令牌是否已提前创建

如果您将令牌存储在数据库中,那么当您从cookie接收令牌时,可以根据数据库中的值对其进行验证。如果在cookie中接收的令牌已经存在于数据库中,则它已经被创建

至于如何将其保存在cookie中,当您首次创建cookie时,只需设置适当的过期日期。如果MaxAge设置为负值,则浏览器会话关闭后,cookie将自动删除