Cómo asignar un valor al atributo principal en shiro
Principal es un objeto, es decir, un objeto de entidad con un atributo de nombre de usuario
Los detalles son los siguientes:
En el método de inicio de sesión, llame al asunto. login (token), también debe construir manualmente el objeto SimpleAuthenticationInfo usando principal y domainName. De hecho, el principal aquí es un objeto, es decir, un objeto de entidad con un atributo de nombre de usuario, y luego el objeto SimpleAuthenticationInfo se almacenará en la sesión. .
El código es el siguiente: try?{ sujeto.login(token); //Obtener el objeto kingdomSecurityManager, que contiene mucha información, como datos en el archivo de configuración RealmSecurityManager?=? (RealmSecurityManager)?securityManager; Collectionlt;Realmgt;?collection?=?realmSecurityManager.getRealms();if?(colección! null?amp;amp;?collection.size()gt;0){ Iterador?iterador?=?colección .iterator();? while(iterator.hasNext()){Realm?realm?=?(Realm)iterator.next();? // Obtener el nombre de la fuente de datos predeterminada, aunque el nombre predeterminado es iniRealm, String?realmName. ?= también se puede obtener mediante programación. ?realm.getName(); //Objeto de entidad personalizado User?setUsername(nombre de usuario); user.setPassword(contraseña); //Obtener el objeto SimpleAuthenticationInfo?info?=?new?SimpleAuthenticationInfo( usuario, contraseña, domainName); // analiza a través del código fuente después de llamar a sujeto.login (token), se guardará en la sesión a través de SubjectContext, por lo que se reutiliza directamente el código fuente (clase DefaultSecurityManager) SubjectContext?subjectContext?= ?nuevo?DefaultSubjectContext(); sujetoContext.setAuthenticated(verdadero); sujetoContext.setAuthenticationToken(token); sujetoContext.setAuthenticationInfo(info); if(¡asunto! =?null)?{ sujetoContext.setSubject(asunto);
}// Guardar en Completado en este método
realmSecurityManager.createSubject(subjectContext);
}
}
}catch (UnknownAccountException?e){
error?=?""El nombre de usuario no existe";
}
error?=?"?El nombre de usuario no existe ";
}catch?(IncorrectCredentialsException?e){
error?=?"Nombre de usuario o contraseña incorrectos";
>}catch?(AuthenticationException?e){
error?=?"Otro error" e.getMessage();
}
El resultado final es la etiqueta lt;shiro:principal property="username"/gt; Los resultados se muestran correctamente en la página, lo que indica que este método funciona.