code: public UserAccessToken generateAccessToken(User user, String device) {
  		if (user == null)
  			return null;
  		Criteria criteria = this.dao.newCriteria(UserAccessToken.class)
  				.add(Restrictions.eq("user", user))
  				.add(Restrictions.eqOrIsNull("device", device))
  				.add(Restrictions.gt("expiration", new Date()))
  				.addOrder(Order.asc("expiration"));
  		List<UserAccessToken> tokens = this.dao.findByCriteria(criteria, UserAccessToken.class);
  		if (GeneralUtils.isEmpty(tokens)) {
  			UserAccessToken token = new UserAccessToken();
  			token.setUser(user);
  			token.setDevice(device);
  			token.setCreation(new Date());
  			token.setCreationIp(this.request.getRemoteAddr());
  			token.setExpiration(new Date(token.getCreation().getTime() + token.getTtl()));
  			token.setToken(CryptManager.digest(user.getEmail() + "#" + String.valueOf(token.getCreation().getTime())
  					+ "@" + String.valueOf(Math.random())));
  			this.dao.persist(token);
  			return token;
  		}
  		return tokens.get(0);
  	}
docs: Retorna o token de acesso do usuário.
  
  @param user Usuário para recuperar o token.
  @param device ID do dispositivo da token.
  @return token Token de acesso do usuário.