redis获取与设置用户缓存信息

redis获取与设置用户缓存信息

import java.util.List;

public class SessionData {
	private String token;
	private String appid;
	
	private int userId;
	private String userName;
	private int orgId;
	private String orgCode;
	private String orgName;
	private int orgLevel;
	private String orgDataCode;
	private String orgManageDataCode;
	private List<Resource> resourceList;
	private List<Role> roleList;
}
    @Autowired
	private CacheServiceUtil cacheService;
    @RequestMapping(value="/login")
	public AssembleJSON login(HttpServletRequest request, HttpServletResponse response){
String usercode = request.getParameter("usercode");
		String userpass = request.getParameter("userpass");
		String appid = request.getHeader("appid");
		String token = CommonUtils.getUUID();
		//获取用户信息
		AssembleJSON userByCode = frameService.findUserByCode(usercode);
		Map<String,Object> map = (Map<String, Object>) userByCode.getData();
		String password = "";
		if (map != null) {
			password = (String) map.get("userPass");
			userpass = MD5Util.MD5Encrypted(MD5Util.MD5Encrypted(userpass));
			userpass  = SHA1Util.getSha1(userpass);
		}
		if (password.equals(userpass)) {
			//设置缓存信息
			SessionData sessionData = new SessionData();
			sessionData.setAppid(appid);
			sessionData.setToken(token);
            CacheModel cacheModel = new CacheModel();
				cacheModel.setSessionCode(Constant.CACHE_SESSION_PREFIX+appid+":"+token);
				cacheModel.setData(mapper.writeValueAsString(sessionData));
				cacheModel.setExpire(60*6);
				cacheService.setSession(cacheModel);
}


public class CacheModel {
	private String sessionCode;
	private String cacheCode;
	private String data;
	private long expire;
	public CacheModel(String sessionCode, String data, long expire) {

		this.sessionCode = sessionCode;
		this.data = data;
		this.expire = expire;
	}

	public CacheModel(String sessionCode, long expire) {
		this.sessionCode = sessionCode;
		this.expire = expire;
	}

	public CacheModel() {
	}
}
	@PostMapping("/setSession")
	public boolean setSession(@RequestBody CacheModel cacheModel) {
		if(cacheModel.getExpire()>0)
			redisServiceImpl.set(cacheModel.getSessionCode(), cacheModel.getData(),cacheModel.getExpire()*60*1000,TimeUnit.MILLISECONDS);
		else
			redisServiceImpl.set(cacheModel.getSessionCode(),cacheModel.getData());

		return true;
	}

import org.springframework.data.redis.core.RedisTemplate;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Service
public class RedisServiceImpl implements CacheService {

	@Autowired
	private RedisTemplate redisTemplate;
	/**
	 * 写入缓存设置时效时间
	 * 
	 * @param key
	 * @param value
	 * @return
	 */
	public boolean set(final String key, Object value, Long expireTime, TimeUnit timeUnit) {
		boolean result = false;
		try {
			ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
			operations.set(key, value);
			redisTemplate.expire(key, expireTime, timeUnit);
			result = true;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return result;
	}
}

获取缓存中的数据

SessionData sessionData =getCurrUserData();

	 protected SessionData getCurrUserData()
	 {
		 return CacheUtil.GetSessionData(getRequest().getHeader(Constant.APPID),getRequest().getHeader(Constant.TOKEN));
	 }

	/**获取登录用户缓存信息
	 * 
	 * @param token 用户token
	 */
	public static final SessionData GetSessionData(String appid,String token)
	{
		/*ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
		HttpServletRequest req =  attributes.getRequest();
		String appid =req.getHeader(Constant.APPID);
		String token =req.getHeader(Constant.TOKEN);*/
		long expire =0; //这里需要从同一配置获取
		String getKey = Constant.CACHE_SESSION_PREFIX + appid + ":" + token;
		CacheModel cacheModel = new CacheModel();
		cacheModel.setSessionCode(getKey);
		cacheModel.setExpire(expire);
		String result =cacheServiceUtil.getSession(cacheModel);
		if(result==null){
			throw new CntenException(result, "401", "登陆超时,请重新登陆!");
		}

		SessionData sessionData = JSONObject.parseObject(result, SessionData.class);
		return sessionData;
	}

@FeignClient(name = "produ-data-cache")
public interface CacheServiceUtil {
	@GetMapping("/getSession")
	String getSession(@RequestBody CacheModel cacheModel);
}

	@PostMapping("/getSession")
	public String getSession(@RequestBody CacheModel cacheModel) {
		if (cacheModel.getExpire() > 0) {
			Object obj = redisServiceImpl.get(cacheModel.getSessionCode());
			if (obj != null) {
				redisServiceImpl.expire(cacheModel.getSessionCode(), cacheModel.getExpire() * 60 * 1000);
				return obj.toString();
			}else {
				return null;
			}

		}
		Object res = redisServiceImpl.get(cacheModel.getSessionCode());
		if (res != null) {
			return res.toString();
		}else {
			return null;
		}
	}	

public Object get(final String key) {
		Object result = null;
		ValueOperations<Serializable, Object> operations = redisTemplate.opsForValue();
		result = operations.get(key);
		return result;
	}

猜你喜欢

转载自blog.csdn.net/qq_35029061/article/details/83311113
今日推荐