No integro SpringMVC aquí, pero uso el archivo de configuración INI directamente.
shiro.ini
[Main]# Los objetos y sus propiedades se definen aquí,# como el SecurityManager, Realms y cualquier cosa# más necesaria para construir SecurityManagerAuthc.loginurl = /Login.jspauthc.successurl = /web/index.jsp#cache ManagerBuiltCachemanager = org.apache.shiro.cache.memoryConstrainseCachemanagerSecurityManager = org.apache.shiro.web.mgt.defaultwebsecuritymanagersecuritymanager.cachemanager = $ builtincachemanagersecurityManager.sessionManager = $ sessionManager#Session debe configurar la sesión. Cuando forcas la salida, sessionManager = org.apache.shiro.web.session.mgt.defaultmanager.sessiondao = $ sessiondaSessionDao = org.apache.shiro.session.mgt.eis.memorysessiondao# create lDap RealmlDapRealm = org.apache.shiro.realm.ldap.jndildapRealm# .........# configure jdbc dataSourcedataSource = org.postgresql.ds.pgpoolingdataSource# .......# crea jdbc reasm.jdbcrealmissionOlingSoVeSenabled = truejdbcrealm = org.apache.shiro.realm.jdbc.jdbcrealmjdbcrealm.userroleQuery = ...... jdbcrealm.permissionQuery = ...... jdbcrealm.dataSource = $ dataSource#self RealMlocalauthorizingRealm = com.redbudtek.shiro.localauthorizingRealmscurityMeRAger.Realms = $ ldaprealm, $ localauthorizingRealm
En LocalAuthorizingRealm, elimine las otras sesiones del usuario antes de iniciar sesión para la autenticación:
@OverrideProtected AuthenticationInfo doGetAuthenticationInfo (AuthenticationToken AutenticationToken) lanza AuthenticationException {String UserName = (String) AuthenticationToken.getPripal (); // HandleDefaultWebSecurityManager SecurityManager = (DefaultWebsecUsEcSoCuTeManager) SecurityUtils.getSecurityManer (); (DefaultWebSessionManager) SecurityManager.getSessionManager (); colección <session> sessions = sessionManager.getSessionDao (). GetActivesSionsions (); // Obtenga la lista de sesión de usuario actualmente registrada para (Session Sessions: Sessions) {// Clear Sessionif Guardado por el usuario cuando inició sesión antes (username.equals (string.ValueOf (session.getAttribute (defaultSubjectContext.prudipals_session_key))))))))) {sessionManager.getSessionDao (). delete (sesión);}} string pwd = null; return NeweuthenticationInfo (username, pwd, getName ()); Después de eliminar la sesión, debe haber interacción entre el cliente y el servidor antes de que Shiro pueda hacer juicios de autenticación. Al interactuar con el servidor, la captura de pantalla de la información del sujeto es la siguiente:
En este momento, la autenticación del usuario iniciada ha expirado y puede responder al cliente.
Lo anterior es lo que el editor le presenta para realizar inicio de sesión único (un usuario solo puede iniciar sesión en un lugar al mismo tiempo). Espero que sea útil para todos. Si tiene alguna pregunta, déjame un mensaje y el editor responderá a todos a tiempo. ¡Muchas gracias por su apoyo al sitio web de Wulin.com!