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

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;
}
}