Da die ursprüngliche Logik des Systems die einmalige Anmeldung mit Spring Session und die von Redis erstellte Sitzungsfreigabe ist, wird in der Sitzung ein Schlüsselwert festgelegt, der angibt, dass sich der Benutzer angemeldet hat, und der HttpServletRequestWrapper wird aktiviert Umgeschrieben, um den RemoteUser-Datenwert festzulegen.
class RemoteUserRequestWrapper extends HttpServletRequestWrapper { String userCode; RemoteUserRequestWrapper(HttpServletRequest request) { super(request); this.userCode = (String) request.getSession() .getAttribute(org.apache.commons.lang3.StringUtils.isBlank(sessionKeyName)?DEFAULT_SESSION_KEY_NAME:sessionKeyName); } @Override public String getRemoteUser() { return userCode; } }
Spring Die von der Sitzung in Redis zwischengespeicherten Daten Die Sitzungseinstellung läuft ab und das RemoveAttribute kann die Schlüsseldaten in Redis nicht löschen. Sie können also nur Folgendes zur Abmeldesystemlogik für Datenstatistiken hinzufügen:
Set<String> keys = RedisUtils.redisTemplate.keys("spring:session:sessions:*"); for(String key : keys){ if(key.indexOf("expires")==-1){ String s = (String)RedisUtils.redisTemplate.opsForHash().get(key, "sessionAttr:ssoLoginUser"); if(request.getRemoteUser().equals(s)) { logger.info("loginusername:{}",s) RedisUtils.redisTemplate.opsForHash().delete(key, "sessionAttr:ssoLoginUser"); } } }
pom.xml:
List<Map<String,Object>> list = new ArrayList<Map<String, Object>>(); List<Map<String,Object>> data = new ArrayList<Map<String, Object>>(); Set<String> keys = redisTemplate.keys("spring:session:sessions:*"); for(String key : keys){ if(key.indexOf("expires")==-1){ String s = (String)redisTemplate.opsForHash().get(key, "sessionAttr:ssoLoginUser"); if(StringUtils.isNotBlank(s)) { System.out.println(s); Map<String,Object> map = new HashMap<String,Object>(16); map.put("usercode", s); list.add(map); } } } return list;RedisUtils.java:
<dependency> <groupId>org.springframework.session</groupId> <artifactId>spring-session-data-redis</artifactId> <version>1.2.2.RELEASE</version> <type>pom</type> </dependency> <dependency> <groupId>biz.paluch.redis</groupId> <artifactId>lettuce</artifactId> <version>3.5.0.Final</version> </dependency>
Das obige ist der detaillierte Inhalt vonWie zählt SpringSession die Anzahl der Online-Benutzer über Redis?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!