<fastjson.version>1.2.38</fastjson.version>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>${fastjson.version}</version>
</dependency>
定加粗样式义接口
package com.etc.redis;
import java.security.PrivateKey;
/**
* @Author Mr.findelist
* @program: seckillplus
* @Date 2020/7/22 16:01
**/
public interface KeyPrefix {
//存活时间
int expirSeconds();
//前缀
String getPrefix();
}
实现接口
package com.etc.redis;
/**
* @Author Mr.findelist
* @program: seckillplus
* @Date 2020/7/22 16:02
**/
public class BasePrefix implements KeyPrefix{
//时间
private int expirSeconds;
//key
private String prefix;
public BasePrefix(int expirSeconds, String prefix) {
this.expirSeconds = expirSeconds;
this.prefix = prefix;
}
public BasePrefix( String prefix) {
this(0,prefix);
}
@Override
public int expirSeconds() {
return expirSeconds;
}
@Override
public String getPrefix() {
return this.prefix;
}
}
继承父类
package com.etc.redis;
/**
* @Author Mr.findelist
* @program: seckillplus
* @Date 2020/7/22 16:02
**/
public class MiaoShaUserKey extends BasePrefix {
public static final int TOKEN_EXPIER = 3600 * 24 * 2;
public static MiaoShaUserKey token=new MiaoShaUserKey(TOKEN_EXPIER,"tk");
public MiaoShaUserKey(int expirSeconds, String prefix) {
super(expirSeconds, prefix);
}
public MiaoShaUserKey(String prefix) {
super(prefix);
}
}
设置缓存类
package com.etc.redis;
import com.alibaba.fastjson.JSON;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.time.Duration;
/**
* @Author Mr.findelist
* @program: seckillplus
* @Date 2020/8/8 20:14
**/
@Service
public class RedisService {
@Autowired
private StringRedisTemplate stringRedisTemplate;
@Autowired
private RedisTemplate redisTemplate;
public void set(BasePrefix basePrefex, String key, Object value) {
// String beantostring = beantostring(value);
stringRedisTemplate.opsForValue().set(basePrefex.getPrefix() + key, value.toString());
if (basePrefex.expirSeconds() != 0) {
redisTemplate.expire(basePrefex.getPrefix() + key, Duration.ofSeconds(basePrefex.expirSeconds()));
}
}
/**
* 累加
* @param basePrefex
* @param key
*/
public void incr(BasePrefix basePrefex, String key) {
stringRedisTemplate.opsForValue().increment(basePrefex.getPrefix() + key, 1);
}
public <T> T get(BasePrefix basePrefex, String key, Class<T> tClass) {
String s = stringRedisTemplate.opsForValue().get(basePrefex.getPrefix() + key);
return stringToBean(s, tClass);
}
public void get(BasePrefix basePrefex) {
}
public String beantostring(Object obj) {
return JSON.toJSONString(obj);
}
public <T> T stringToBean(String str, Class<T> tClass) {
if (StringUtils.isEmpty(str)) {
return null;
}
if (tClass == int.class || tClass == Integer.class) {
return (T) Integer.valueOf(str);
} else if (tClass == Long.class | tClass == Long.class) {
return (T) Long.valueOf(str);
} else if (tClass == String.class) {
return (T) str;
} else {
return JSON.toJavaObject(JSON.parseObject(str), tClass);
}
}
}
写缓存 添加cookie
package com.etc.service.impl;
import com.alibaba.fastjson.JSON;
import com.etc.common.AbnoNum;
import com.etc.dao.UserDao;
import com.etc.domian.User;
import com.etc.domian.bo.UserBo;
import com.etc.exitpation.BizExiption;
import com.etc.redis.MiaoShaUserKey;
import com.etc.service.IUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.SessionAttributes;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;
/**
* @Author Mr.findelist
* @program: seckill
* @Date 2020/7/20 15:52
**/
@SessionAttributes({"user"})
@Service
public class UserServiceImpl implements IUserService {
@Autowired
private UserDao userDao;
@Autowired
private StringRedisTemplate stringRedisTemplate;
public static final String COOKIE_TOKEN_NAME = "token";
@Override
public User findById(Long id) {
return userDao.selectById(id);
}
@Override
public boolean login(UserBo userBo, HttpServletResponse response, String y, ModelMap map, HttpServletRequest request) {
if (userBo == null) {
//用户名或密码为空
throw new BizExiption(AbnoNum.USERNAME_IS_NULL.getResCode(), AbnoNum.USERNAME_IS_NULL.getRestMsg());
}
User user = findById(userBo.getId());
if (user == null) {
//用户不存在
throw new BizExiption(AbnoNum.USERNAME_IS_ENIST.getResCode(), AbnoNum.USERNAME_IS_ENIST.getRestMsg());
}
if (!userBo.getPassword().equals(user.getPassword())) {
//密码错误
throw new BizExiption(AbnoNum.USERPASS_IS_ERROR.getResCode(), AbnoNum.USERPASS_IS_ERROR.getRestMsg());
}
if(userBo.getPassword().equals(user.getPassword())){
//写入cookie
String tokenuuid = UUID.randomUUID().toString().replace("-", "");
addcookie(response, tokenuuid, user);
map.put("user",user);
request.getSession().setAttribute("user",user);
return true;
}
return false;
}
@Override
public int updateById(User user) {
return userDao.updateById(user);
}
private void addcookie(HttpServletResponse response, String tokenuuid, User user) {
//写缓存
String s = JSON.toJSONString(user);
stringRedisTemplate.opsForValue().set(MiaoShaUserKey.token.getPrefix() + ":" + tokenuuid, s);
Cookie cookie = new Cookie(COOKIE_TOKEN_NAME,tokenuuid);
//设置过期时间(以秒为单位)
cookie.setMaxAge(MiaoShaUserKey.TOKEN_EXPIER);
//设置添加到根路径下
cookie.setPath("/");
//添加Cookie
response.addCookie(cookie);
}
/**
* 根据cookie获取用户
* @param response
* @param tokenuuid
* @return
*/
@Override
public User getcookie(HttpServletResponse response, String tokenuuid) {
if (StringUtils.isEmpty(tokenuuid)) {
return null;
}
String s = stringRedisTemplate.opsForValue().get(MiaoShaUserKey.token.getPrefix() + ":" + tokenuuid);
User user = JSON.parseObject(s, User.class);
/*if (user != null) {
addcookie(response, tokenuuid, user);
}*/
return user;
}
}