You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
84 lines
2.5 KiB
84 lines
2.5 KiB
package com.community.pocket.repository.android;
|
|
|
|
import com.community.pocket.entity.po.android.Token;
|
|
import com.community.pocket.repository.BaseDao;
|
|
import org.slf4j.Logger;
|
|
import org.slf4j.LoggerFactory;
|
|
import org.springframework.beans.factory.annotation.Value;
|
|
import org.springframework.data.mongodb.core.query.Criteria;
|
|
import org.springframework.data.mongodb.core.query.Query;
|
|
import org.springframework.stereotype.Repository;
|
|
import org.springframework.util.DigestUtils;
|
|
|
|
import java.util.concurrent.TimeUnit;
|
|
|
|
//令牌数据接口
|
|
@Repository
|
|
public class TokenDao extends BaseDao<Token> {
|
|
|
|
@Value("${token.day}")
|
|
private int day;
|
|
|
|
|
|
private static final Logger LOG = LoggerFactory.getLogger(TokenDao.class);
|
|
|
|
/**
|
|
* 保存令牌
|
|
*/
|
|
public Token save(String username){
|
|
try {
|
|
if(cleanToken(username)) {
|
|
Token token = new Token();
|
|
token.setTime(System.currentTimeMillis() + TimeUnit.DAYS.toMillis(day));
|
|
token.setUsername(username);
|
|
token.setToken(DigestUtils.md5DigestAsHex((token.getUsername() + token.getTime()).getBytes()));
|
|
save(token);
|
|
return token;
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
LOG.error(e.toString());
|
|
}
|
|
return null;
|
|
}
|
|
|
|
//清空令牌
|
|
public boolean cleanToken(String username){
|
|
Query query=new Query(Criteria.where("username").is(username));
|
|
if(mongoTemplate.exists(query,entityClass())){
|
|
return mongoTemplate.remove(query,entityClass()).wasAcknowledged();
|
|
}else {
|
|
return true;
|
|
}
|
|
}
|
|
|
|
//判断令牌是否有效
|
|
public <T extends Token> boolean checkToken(T token){
|
|
return checkToken(token.getToken());
|
|
}
|
|
|
|
//判断令牌是否存在
|
|
private boolean checkToken(String token) {
|
|
return mongoTemplate.exists(new Query(Criteria.where("token").is(token).and("time").gt(System.currentTimeMillis())), entityClass());
|
|
}
|
|
|
|
public Token get(String token){
|
|
return mongoTemplate.findOne(new Query(Criteria.where("token").is(token)),entityClass());
|
|
}
|
|
|
|
@Override
|
|
public Token save(Token token) {
|
|
try {
|
|
mongoTemplate.save(token);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
LOG.error(e.toString());
|
|
}
|
|
return null;
|
|
}
|
|
|
|
@Override
|
|
public Class<Token> entityClass() {
|
|
return Token.class;
|
|
}
|
|
}
|
|
|