shirocas cómo llevar a cabo una sesión**** disfruta de redis tomcat
Paso 1: Configurar WEB.XML
lt;filtergt;
lt;filter-namegt;shiroFilterlt;/filter-namegt;
p>
lt;filter-classgt;org.DelegatingFilterProxylt;/filter-classgt;
lt;init-paramgt;
lt;param-namegt; targetFilterLifecyclelt; /param -namegt;
lt;param-valuegt;truelt;/param-valuegt;
lt;/init-paramgt;
lt;/filtergt ;
lt;filter-mappinggt;
lt;filter-namegt;shiroFilterlt;/filter-namegt;
lt;url-patternngt;/*lt ;/ url-patterngt;
lt;/filter-mappinggt;
Paso 2: configuración del resorte integrado de SHIRO
pseudocódigoapplicationContext-shiro.xml:
lt; bean id="sessionManager" class="org.apache.shiro.web.session.mgt.DefaultWebSessionManager"/gt;
lt;property name="globalSessionTimeout" value="3600000"/gt;
lt;property name="sessionDAO" ref="zkShiroSessionDAO"/gt;
lt;property name="sessionValidationScheduler" ref="sessionValidationScheduler"/gt;
lt;property name="sessionValidationSchedulerEnabled" value="true"/gt;
lt;property name="sessionIdCookie " ref="wapsession"/gt;
lt;/bean gt;
lt;! --
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.
--gt;
lt; bean id="wapsession" class="org.apache.shiro.web.servlet.SimpleCookie"gt;
lt; constructor-arg nombre="nombre" valor="WAPSESSIONID"/gt;
lt;/beangt;
lt;! --
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
-- gt;
lt;bean id="sessionValidationScheduler"
?class="org.apache.shiro.session.mgt.ExecutorServiceSessionValidationScheduler"gt;
lt; nombre de propiedad="intervalo" valor="3600000"/gt;
lt; nombre de propiedad="sessionManager" ref="sessionManager"/gt; ;/beangt;
lt;! --Conviértase en un contenedor de almacenamiento de sesiones a través de zk--gt;
lt; bean id="zkShiroSessionDAO" class="b2gonline. Incometaxexamine._systembase.shiro.ZKShiroSessionDAO"
es ;! --Utilice la memoria para almacenar en caché la información de inicio de sesión del usuario, obtenga la información de inicio de sesión del usuario una vez y luego guárdela en la memoria caché para reducir muchas operaciones de lectura por parte de Shiro, y bórrela automáticamente después de que el usuario cierre la sesión o finalice el tiempo de espera --gt;
lt; constructor-arg nombre="useMemCache" value="true"/gt;
lt; nombre de propiedad="zookeeperTemplate" ref="zookeeperTemplate"/gt; nombre de propiedad="shiroSessionZKPath" valor="/SHIROSESSIONS"/gt;
lt;nombre de propiedad="sessionPrefix" valor="sesión-"/gt;
lt;/beangt ;
lt;! -- Interfaz de seguridad SHIRO --gt;
lt; bean id="securityManager" class="org.apache.shiro.web.
mgt.DefaultWebSecurityManager"gt;
...
lt;property name="sessionManager" ref="sessionManager"/gt;
lt;/beangt ;
Paso 3: clase de implementación Shiro-SessionDao de Zookeeper
ZKShiroSessionDAO.ZNode;
importar org.apache.shiro.cache.AbstractCacheManager;
importar org.apache.shiro.cache.CacheException;
importar org.apache.shiro.cache.MapCache;
importar org.apache.shiro.cache.CacheException;
p>
importar org.apache.shiro.cache.MapCache; sesión de sesión;
byte[] byteData = zookeeperTemplate.getData(getPath(id)).getByteData(); p>
if (byteData ! = null & byteData.length gt; 0) {
sesión = (Sesión) SerializationUtils.deserialize(byteData);
if (useMemCache ) {
this.cache(sesión, id);
logger.debug("doReadSession para ruta: {}, ¡agregue caché!", getPath(id));
}
Devolver sesión
} else {
Devolver nulo
}
} p >
/**
* Generar ruta completa
*
* @ param sessID
* @return
*/
private String getPath(Serializable sessID) {
return shiroSessionZKPath '/' sessionPrefix sessID.toString(); p >
}
/**
* Sesión leída o actualizada
*
* @param sesión
* @param act update/save
*/
private void saveSession(Sesión de sesión, String act) {
Serializable sessionId = sesión. getId();
ZNode sessionNode = nuevo ZNode();
sessionNod
e.setByteData(SerializationUtils.serialize(session));
sessionNode.setPath(getPath(sessionId));
logger.debug("guardar sesión para id: {}, actuar: {}", sessionId, actuar);
if (act == "update")
zookeeperTemplate.setData( sessionNode);
else
zookeeperTemplate.createNode(sessionNode);
}
}
}