Red de conocimiento informático - Problemas con los teléfonos móviles - shirocas cómo llevar a cabo una sesión**** disfruta de redis tomcat

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();

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

}

}

/**

* Generar ruta completa

*

* @ param sessID

* @return

*/

private String getPath(Serializable sessID) {

return shiroSessionZKPath '/' sessionPrefix sessID.toString();

}

/**

* 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);

}

}

}