단일 사용자 로그인 정보
먼저 login 코드를 실행합니다.
//... ...
// uuid
String uuid = super.getUUID();
//
LoginUser login = new LoginUser();
login.setId(user.getId());
login.setAccount(user.getAccount());
login.setRealName(user.getRealName());
login.setUuid(uuid);
// cookie
CookieUtil.deleteCookie(response,request, configInfo.getAdminCookieName());
CookieUtil.addCookie(response, configInfo.getAdminCookieName(), uuid);
// redis key
String key = configInfo.getRedisSessionListKey() + login.getAccount();
//
if(redisClient.isExist(key)){
//
redisClient.del(key);
}
redisClient.setObject(key, login, 0);
//
request.getSession().setAttribute(configInfo.getAdminSessionName(), login);
여기 제가 레드리스로 로그인 사용자를 저장했어요.
우선, 성uid는 쿠키,session, 캐시에 넣고 뒤에서 검증하기 편리하고,
그리고 Redis에 존재하는지 판단해야 합니다. 두 번째 로그인을 해서 첫 번째 로그인을 밀어내면 저장된 대상 중 uid를 업데이트하고 최신으로 업데이트합니다. 업데이트하지 않으면 첫 번째 사용자가 로그인한 후 같은 계정에 로그인할 수 없습니다...
다음은 필터링입니다.
// cookie
String uuid = CookieUtil.getCookieValue(httpRequest, configInfo.getAdminCookieName());
LoginUser user = (LoginUser)httpRequest.getSession().getAttribute(configInfo.getAdminSessionName());
String uri = httpRequest.getRequestURI();
String redisSessionKey = configInfo.getRedisSessionListKey() + user.getAccount();
//
if(redisClient.isExist(redisSessionKey)){
LoginUser login = (LoginUser) redisClient.getObject(redisSessionKey);
// redis uuid cookie
if(!login.getUuid().equals(uuid)){
// ajax
if(uri.contains("/json/")){
//
return;
}
// id , ,
httpResponse.sendRedirect("/" + configInfo.getProjectName() + "/main.jsp");
return;
}
}else{
// ,
httpResponse.sendRedirect("/" + configInfo.getProjectName() + "/index.jsp");
return;
}
우선 캐시에 현재 사용자가 있는지 판단해 보세요. (일반적인 상황에서는 있지만, Redis가 다시 시작하거나 다운되면 이 상황을 초래할 수 있습니다. 검증을 추가합니다.)
주로 uid가 일치하는지 판단하면 됩니다. 로그인할 때 우리는 생성된 최신 uid를 캐시에 넣었기 때문에 일치하지 않으면 이 계정이 다른 곳에서 로그인했다는 것을 설명하고 다른 조작을 할 수 있습니다.
마지막으로 세션을 제거할 때 다음을 수행합니다.
public class AppSessionListener implements HttpSessionListener {
@Override
public void sessionCreated(HttpSessionEvent event) {
System.out.println("Session ");
}
@Override
public void sessionDestroyed(HttpSessionEvent event) {
System.out.println("Session ");
// spring bean
ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(event.getSession().getServletContext());
RedisClient redis = ctx.getBean(RedisClient.class);
ConfigInfo configInfo = ctx.getBean(ConfigInfo.class);
HttpSession session = event.getSession();
//
LoginUser user = (LoginUser)session.getAttribute(configInfo.getAdminSessionName());
if(user != null ){
String key = configInfo.getRedisSessionListKey() + user.getAccount();
if(redis.isExist(key)){
redis.del(key);
System.out.println(" ...");
}
}
}
}
세션 제거할 때 캐시 지우기...지우지 않아도 될 것 같은데 캐시에 계속 남을 것 같아서...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.