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