英文:
How to validate a token in java
问题
以下是您提供的代码的翻译部分:
我有一个类似这样的方法:
private void validateToken(String token) throws Exception {
// 检查令牌是否由服务器发行,并且是否未过期
// 如果令牌无效,则抛出异常
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Query q = em.createQuery("Select u from User u where u.token = :token");
q.setParameter("token", token);
User uu = (User)q.getSingleResult();
long diff = date.getTime() - uu.getTokenExpires().getTime();
long diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diff);
System.out.println(diffMinutes);
if (!uu.getToken().equals(token) || diffMinutes > 2) {
System.out.println("令牌无效");
}
}
还有一个用于认证用户的方法:
public User authenticate(String username, String password) throws Exception {
// 与数据库、LDAP、文件或其他方式进行认证
// 如果凭据无效,则抛出异常
Query query = em.createQuery("Select u from User u WHERE u.username = :name and u.password = :password");
query.setParameter("name", username);
query.setParameter("password", password);
return (User) query.getSingleResult();
}
这是用于生成令牌的方法:
private String issueToken(String username) {
// 发行令牌(可以是随机字符串持久化到数据库或JWT令牌)
// 发行的令牌必须与用户关联
// 返回发行的令牌
Random random = new SecureRandom();
String token = new BigInteger(130, random).toString(32);
return token;
}
如何验证令牌,如何判断令牌是否过期 - 令牌在两分钟后过期。
英文:
I have a method like this:
private void validateToken(String token) throws Exception {
// Check if the token was issued by the server and if it's not expired
// Throw an Exception if the token is invalid
Calendar calendar = Calendar.getInstance();
Date date = calendar.getTime();
Query q = em.createQuery("Select u from User u where u.token = :token");
q.setParameter("token", token);
User uu = (User)q.getSingleResult();
long diff = date.getTime() - uu.getTokenExpires().getTime();
long diffMinutes = TimeUnit.MILLISECONDS.toMinutes(diff);
System.out.println(diffMinutes);
if (!uu.getToken().equals(token) || diffMinutes > 2) {
System.out.println("Token is invalid");
}
}
And a method that authenticate a user:
public User authenticate(String username, String password) throws Exception {
// Authenticate against a database, LDAP, file or whatever
// Throw an Exception if the credentials are invalid
Query query = em.createQuery("Select u from User u WHERE u.username = :name and u.password = :password");
query.setParameter("name", username);
query.setParameter("password", password);
return (User) query.getSingleResult();
}
This is the method used to generate the token:
private String issueToken(String username) {
// Issue a token (can be a random String persisted to a database or a JWT token)
// The issued token must be associated to a user
// Return the issued token
Random random = new SecureRandom();
String token = new BigInteger(130, random).toString(32);
return token;
}
How to validate a token, how to know if a token is expired or not - a token is expired after two minutes?
专注分享java语言的经验与见解,让所有开发者获益!
评论