zoukankan      html  css  js  c++  java
  • 第四讲 自定义Realm来实现身份认证

    1、jdbcReam已经实现了从数据库中获取用户的验证信息,但是jdbcRealm灵活性太差。如果要实现自己的一些特殊应用时,将不能支持。这时,可以通过自定义Realm来实现身份的认证功能。

    2、Realm是一个接口,在接口中定义了根据token获得认证信息的方法。Shiro内容实现了一系列的realm。这些不同的Realm实现类提供了不同的功能。AuthenticatingRealm实现了获取身份信息的功能。AuthorizingRealm实现了获取权限信息的功能。通常自定义Realm需要继承AuthorizingRealm,这样既可以提供身份认证的自定义方法,也可以实现授权的自定义方法。

    3、实现自定义Realm

    package com.sun123.realm;
    
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.AuthenticationInfo;
    import org.apache.shiro.authc.AuthenticationToken;
    import org.apache.shiro.authc.SimpleAuthenticationInfo;
    import org.apache.shiro.authz.AuthorizationInfo;
    import org.apache.shiro.realm.AuthorizingRealm;
    import org.apache.shiro.subject.PrincipalCollection;
    
    public class UserRealm extends AuthorizingRealm {
    
        /**
         * 自定义realm的实现    该realm类提供了两个方法
         * doGetAuthorizationInfo    获取认证信息
         * doGetAuthenticationInfo    获取权限信息
         */
        @Override
        public String getName() {
            // 自定义
            return "userRealm";
        }
    
        // 完成身份认证,并且返回认证信息
        // 如果身份认证失败,返回null
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            // 获取用户输入的用户名
            String username = (String) token.getPrincipal();// 获取身份信息
            System.out.println("username:" + username);
            // 根据用户名到数据库查询密码信息——模拟
            // 假定从数据库获取的密码为1111
            String pwd = "1111";
            // 将从数据库中查询的信息封装到SimpleAuthenticationInfo中
            SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, pwd, getName());
            return info;
        }
    
        // 授权的信息
        @Override
        protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection arg0) {
            // TODO Auto-generated method stub
            return null;
        }
    
    }

      注意:使用shiro来完成权限管理,shiro并不会去维护数据。Shiro中使用的数据,需要程序员根据处理业务将数据传递给shiro相应的接口。

    shiro.ini

    1 [main]
    2 #自定义
    3 userRealm=com.sun123.realm.UserRealm
    4 securityManager.realm=$userRealm
  • 相关阅读:
    IOS开发防止图片渲染的方法
    IOS界面通信-代理(协议)传值
    IOS打开其他应用、以及被其他应用打开
    IOS UITableView的分隔线多出问题
    self.view 的不当操作造成死循环
    IOS 导航栏属性设置
    在iOS 8及以后使用UIAlertController 等各种弹出警告通知
    iOS通过URL构建UIImage
    自定义 URL Scheme 完全指南
    Unknown type name 'NSString' 解决方案
  • 原文地址:https://www.cnblogs.com/116970u/p/10952563.html
Copyright © 2011-2022 走看看