Heim  >  Artikel  >  Datenbank  >  Wie zählt SpringSession die Anzahl der Online-Benutzer über Redis?

Wie zählt SpringSession die Anzahl der Online-Benutzer über Redis?

WBOY
WBOYnach vorne
2023-05-29 10:52:051091Durchsuche

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: Wie zählt SpringSession die Anzahl der Online-Benutzer über Redis?

  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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen