-
如何实现分布式session
这样做的原因是实际情况有多台服务器,当第二请求来到的服务器不是之前的服务器,那么之前的session信息就丢失了,所以要实现分布式session。
用户登录成功后,服务端创建一个token(UUID生成的一个字符串),把token和miaooShaUser对象存在redis当中,然后把token保存在cookie中。当下一次客户端再一次访问服务端,服务端从cookie中,获取到token,进而通过token在redis里拿到miaooShaUser对象。 -
延长有效期,简化controller层的代码。
再一次调用token保存在cookie里方法,即可延长有效期。
SpringMVC的controller方法里的参数的由来,赋值都是由WebMvcConfigurerAdapter的addArgumentResolvers实现的
简化controller层的代码,new一个类继承WebMvcConfigurerAdapter,重写addArgumentResolvers方法。具体实现类是UserArgumentResolver,这个类拿到参数中的token和cookie中的token,然后拿到miaooShaUser对象并返回。
MiaoshaUserService
public class MiaoshaUserService {
public static final String COOKIE_NAME_TOKEN ="TOKEN";
@Autowired
MiaoshaUserDao miaoshaUserDao;
@Autowired
RedisService redisService;
public MiaoshaUser getByid(long id){
return miaoshaUserDao.getById(id);
}
//登录验证
public boolean login(HttpServletResponse response, LoginEntity loginEntity){
if(loginEntity==null){
throw new GlobalException(CodeMsg.SERVER_ERROR);
}
String mobile = loginEntity.getMobile();
String formPass = loginEntity.getPassword();
MiaoshaUser user = getByid(Long.parseLong(mobile));
if