Maison >développement back-end >tutoriel php >Manuel d'utilisation d'Apache Shiro (4) Implémentation du domaine

Manuel d'utilisation d'Apache Shiro (4) Implémentation du domaine

黄舟
黄舟original
2017-01-18 09:32:381288parcourir

Manuel d'utilisation d'Apache Shiro (4) Implémentation du domaine

est mentionné dans le mécanisme de mise en œuvre interne de l'authentification et de l'autorisation, et le traitement final sera confié à Real pour traitement. Parce que dans Shiro, les informations sur l'utilisateur, le rôle et les autorisations dans l'application sont finalement obtenues via Realm. Normalement, les informations de vérification dont Shiro a besoin sont obtenues directement à partir de notre source de données dans Realm. On peut dire que Realm est un DAO dédié aux frameworks de sécurité

1. Implémentation de l'authentification

Comme mentionné ci-dessus, le processus d'authentification de Shiro sera finalement confié à Realm pour exécution, et à ce moment-là. la fois, elle sera appelée la méthode getAuthenticationInfo(token) de Realm.

Cette méthode effectue principalement les opérations suivantes :

1. Vérifiez les informations du jeton soumises pour l'authentification

2 Obtenez les données à partir de la source de données (généralement une base de données). sur les informations du jeton Obtenez les informations utilisateur de

3. Faites correspondre et vérifiez les informations utilisateur.

4. Si la vérification est réussie, une instance AuthenticationInfo encapsulant les informations utilisateur sera renvoyée.

5. Si la vérification échoue, un message d'exception AuthenticationException sera généré.

Ce que nous devons faire dans notre application est de personnaliser une classe Realm, d'hériter de la classe abstraite AuthorizingRealm, de surcharger doGetAuthenticationInfo () et de réécrire la méthode d'obtention des informations utilisateur.

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException { 

UsernamePasswordToken token = (UsernamePasswordToken) authcToken; 

User user = accountManager.findUserByUserName(token.getUsername()); 

if (user != null) { 

return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName()); 

} else { 

return null; 

} 

}

2. Implémentation de l'autorisation

L'implémentation de l'autorisation est très similaire à l'implémentation de l'authentification. Dans notre domaine personnalisé, surchargez la méthode doGetAuthorizationInfo() et réécrivez la méthode pour obtenir les autorisations de l'utilisateur. Utilisez simplement la méthode.

protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { 

String userName = (String) principals.fromRealm(getName()).iterator().next(); 

User user = accountManager.findUserByUserName(userName); 

if (user != null) { 

SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); 

for (Group group : user.getGroupList()) { 

info.addStringPermissions(group.getPermissionList()); 

} 

return info; 

} else { 

return null; 

} 

}

Ce qui précède est le contenu de l'implémentation de Realm dans le manuel d'utilisation d'Apache Shiro (4). Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn