由于业务需要,需要实现一个用户在本系统内只能在一个地点登录,如果在多个地点登录,需要将之前的登录废弃掉,不能正常请求服务器数据。
大体是这样实现的:每次请求接口数据(除过登录接口之外)需要验证SessionId,验证SessionId步骤:
1.先从request中获取requestedSessionId,如果不是空(串),然后去redis中获取该sessionId对应的UserId(用户唯一标识),走第二步;如果是空,需要登录
2.然后再通过userId获取缓存了的sessionId,如果缓存的sessionId不是空,走第三步;是空,需要登录
3.对比缓存的sessionId和从request中获取requestedSessionId是否一致,不一致则说明在别处登录,一致正常响应即可。
详细代码如下:
拦截器部分:
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.util.StringUtils; import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Created by Administrator on 2016/9/24. */ public class SessionControlInterceptor extends HandlerInterceptorAdapter { @Autowired private JedisPool jedisPool; @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)