Cómo utilizar la sesión de operación integrada de Redis en Shiro
filter>
Paso 2: Configuración del resorte integrado de SHIRO
pseudocódigo applicationContext-shiro.xml:
& lt ;nombre de propiedad="globalSessionTimeout" valor="3600000"/>
& lt;nombre de propiedad="sessionDAO" ref="zkShiroSessionDAO"/>
& lt;nombre de propiedad= "sessionValidationScheduler" ref="sessionValidationScheduler"/>
Especifique el SESSIONID del sistema, predeterminado: Problema: conflicto con los nombres de los contenedores SERVLET, como JETTY, TOMCAT, etc.
JSESSIONID predeterminado,
Al salir de SHIRO SERVLET (como el contenedor ERROR-PAGE), el contenedor ERROR-PAGE reasignará el valor de JSESSIONID, lo que provocará que se pierda la sesión de inicio de sesión.
-->
Limpiar las sesiones de zombies con regularidad, Shiro habilitará los subprocesos del demonio en segundo plano para realizar operaciones de limpieza con regularidad
Sesiones aisladas causadas por usuarios que cierran directamente el navegador
-- >
class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler"> < nombre de propiedad="intervalo" valor=" 3600000"/>
< ! -- Interfaz de seguridad SHIRO-->
... p>
name="sessionManager" ref="sessionManager"/> Paso 3: clase de implementación Shiro-SessionDao de Zookeeper ZKShiroSessionDAO.ZNode; p> importar org.apache.shiro.cache.AbstractCacheManager; importar org.apache.shiro.cache.CacheException; importar org.apache.shiro.cache. importar org.apache.shiro.cache.CacheException; importar org.apache.shiro.cache.MapCache; sesión de sesión; byte[ ] byteData = zookeeperTemplate.getData(getPath(id)).getByteData(); if (byteData ! = null && byteData.length > 0) { sesión = (Sesión) SerializationUtils. deserialize(byteData); if (useMemCache) { this.cache(session, id); logger.debug("doReadSession para ruta: {}, agregue caché !", getPath(id)); } Devolver sesión; } else { Devolver nulo; } } /** * Generar ruta completa * * @ param sessID * @return */ cadena privada getPath(Serializable sessID) { return shiroSessionZKPath + '/' + sessionPrefix + sessID.toString(); } /** * Sesión leída o actualizada * * @param sesión * @param act actualizar/guardar */ private void saveSession(Sesión session, String act) { Serializable sessionId = session.getId(); ZNode sessionNode = new ZNode(); sessionNode.setByteData (SerializationUtils. serialize(sesión)); sessionNode.setPath(getPath(sessionId)); logger.debug("guardar sesión para id: {}, actuar: {}", sessionId, act); if (act == "update") zookeeperTemplate.setData( sessionNode); else zookeeperTemplate.createNode(sessionNode); } }