• 自定义 Relam


    package org.zln.hello.realm;
    
    import org.apache.shiro.authc.*;
    import org.apache.shiro.realm.Realm;
    
    /**
     * Created by sherry on 16/9/8.
     */
    public class MyRealm01 implements Realm {
        @Override
        public String getName() {
            return "MyRealm01";
        }
    
        @Override
        public boolean supports(AuthenticationToken token) {
            //仅支持UsernamePasswordToken类型的 Token
            return token instanceof UsernamePasswordToken;
        }
    
        @Override
        public AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
            String username = (String)token.getPrincipal(); //得到用户名
            String password = new String((char[])token.getCredentials()); //得到密码
            if(!"zhang".equals(username)) {
                throw new UnknownAccountException(); //如果用户名错误
                //
            }
            if(!"123".equals(password)) {
                throw new IncorrectCredentialsException(); //如果密码错误
            }
            //如果身份认证验证成功,返回一个 AuthenticationInfo 实现;
    
            return new SimpleAuthenticationInfo(username, password, getName());
        }
    }
    #声明一个 realm
    MyRealm01=org.zln.hello.realm.MyRealm01
    #指定 securityManager 的 realms 实现
    securityManager.realms=$MyRealm01
    package org.zln.hello;
    
    import org.apache.log4j.LogManager;
    import org.apache.log4j.Logger;
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.config.IniSecurityManagerFactory;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.subject.Subject;
    import org.apache.shiro.util.Factory;
    
    /**
     * Created by sherry on 16/9/8.
     */
    public class HelloWorld {
    
        private static Logger logger = LogManager.getLogger(HelloWorld.class);
    
        private static Subject subject;
    
        static {
            //1、获取 SecurityManager 工厂,此处使用 Ini 配置文件初始化 SecurityManager
    //        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-realm.ini");
            //2、得到 SecurityManager 实例 并绑定给 SecurityUtils
            SecurityManager securityManager = factory.getInstance();
            SecurityUtils.setSecurityManager(securityManager);
            //3、得到 Subject 及创建用户名/密码身份验证 Token(即用户身份/凭证)
            subject = SecurityUtils.getSubject();
        }
    
        public static boolean login(String username,String password){
            UsernamePasswordToken token = new UsernamePasswordToken(username,password);
            //4、登录,即身份验证
            try {
                subject.login(token);
            }catch (Exception e){
                logger.info("身份验证失败");
                logger.error(e.getMessage(),e);
                return false;
            }
    
            return subject.isAuthenticated();//是否成功登陆
    
        }
    
        public static void main(String[] args) {
    
            //6、退出
            subject.logout();
        }
    }

    多 Realm 配置 

    #声明一个 realm

    myRealm1=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm1

    myRealm2=com.github.zhangkaitao.shiro.chapter2.realm.MyRealm2

    #指定 securityManager 的 realms 实现

    securityManager.realms=$myRealm1,$myRealm2 

    securityManager 会按照 realms 指定的顺序进行身份认证。此处我们使用显示指定顺序的方 式指定了 Realm 的顺序,如果删除“securityManager.realms=$myRealm1,$myRealm2”,那 么 securityManager 会按照 realm 声明的顺序进行使用(即无需设置 realms 属性,其会自动 发现),当我们显示指定 realm 后,其他没有指定 realm 将被忽略,如 “securityManager.realms=$myRealm1”,那么 myRealm2 不会被自动设置进去。 

  • 相关阅读:
    springboot整合swagger2+跨域问题
    springboot整合日志+多环境配置+热部署
    springboot整合多数据源以及多数据源中的事务处理
    springboot整合jsp
    springboot整合freemarker
    SpringBoot的全局异常处理
    python之多进程记录
    使用python批量造测试数据
    python之global用法
    Jenkins构建从github上克隆时,报Host key verification failed.
  • 原文地址:https://www.cnblogs.com/sherrykid/p/5854190.html
Copyright © 2020-2023  润新知