zoukankan      html  css  js  c++  java
  • Apache Shiro 使用手册(四)Realm 实现

    在认证、授权内部实现机制中都有提到,最终处理都将交给Real进行处理。因为在Shiro中,最终是通过Realm来获取应用程序中的用户、角色及权限 信息的。通常情况下,在Realm中会直接从我们的数据源中获取Shiro需要的验证信息。可以说,Realm是专用于安全框架的DAO.

    一、认证实现
    正如前文所提到的,Shiro的认证过程最终会交由Realm执行,这时会调用Realm的getAuthenticationInfo(token)方法。
    该方法主要执行以下操作:
    1、检查提交的进行认证的令牌信息
    2、根据令牌信息从数据源(通常为数据库)中获取用户信息
    3、对用户信息进行匹配验证。
    4、验证通过将返回一个封装了用户信息的AuthenticationInfo实例。
    5、验证失败则抛出AuthenticationException异常信息。

    而在我们的应用程序中要做的就是自定义一个Realm类,继承AuthorizingRealm抽象类,重载doGetAuthenticationInfo (),重写获取用户信息的方法。

    Java代码  收藏代码
    1. protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {  
    2.         UsernamePasswordToken token = (UsernamePasswordToken) authcToken;  
    3.         User user = accountManager.findUserByUserName(token.getUsername());  
    4.         if (user != null) {  
    5.             return new SimpleAuthenticationInfo(user.getUserName(), user.getPassword(), getName());  
    6.         } else {  
    7.             return null;  
    8.         }  
    9. }  


    二、授权实现
    而授权实现则与认证实现非常相似,在我们自定义的Realm中,重载doGetAuthorizationInfo()方法,重写获取用户权限的方法即可。

    Java代码  收藏代码
      1. protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
      2.         String userName = (String) principals.fromRealm(getName()).iterator().next();  
      3.         User user = accountManager.findUserByUserName(userName);  
      4.         if (user != null) {  
      5.             SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();  
      6.             for (Group group : user.getGroupList()) {  
      7.                 info.addStringPermissions(group.getPermissionList());  
      8.             }  
      9.             return info;  
      10.         } else {  
      11.             return null;  
      12.         }  
    爱拼才会赢!!
  • 相关阅读:
    【乱侃】How do they look them ?
    【softeware】Messy code,some bug of Youdao notebook in EN win7
    【随谈】designing the login page of our project
    【web】Ad in security code, making good use of resource
    SQL数据库内存设置篇
    关系数据库的查询优化策略
    利用SQL未公开的存储过程实现分页
    sql语句总结
    sql中使用cmd命令注销登录用户
    SQLServer 分页存储过程
  • 原文地址:https://www.cnblogs.com/sikewang/p/4596064.html
Copyright © 2011-2022 走看看