• 二、Shiro 认证开发


    I、java开发

    环境准备

    <dependencies>     
        <dependency>         
            <groupId>junit</groupId>         
            <artifactId>junit</artifactId>         
            <version>4.9</version>     
        </dependency>     
        <dependency>         
            <groupId>commons-logging</groupId>         
            <artifactId>commons-logging</artifactId>         
            <version>1.1.3</version>     
        </dependency>     
        <dependency>         
            <groupId>org.apache.shiro</groupId>        
            <artifactId>shiro-core</artifactId>         
            <version>1.2.2</version>     
        </dependency> 
    </dependencies> 
    

    shiro配置文件: shiro.ini

    [users]
    zhang3=123123
    li4=123456
    

    测试

    //测试认证
    public class TestAuthor {
        /**
         * 认证
         * 安全管理器
         * 获取主题
         * token
         *
         */
        public static void main(String[] args) {
            //通过安全管理器工厂
            IniSecurityManagerFactory iniSecurityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
            //获得安全管理器工厂
            SecurityManager securityManager = iniSecurityManagerFactory.getInstance();
            //将安全管理器交给安全工具类
            SecurityUtils.setSecurityManager(securityManager);
    
            //主体对象
            Subject subject = SecurityUtils.getSubject();
            //构建token
            UsernamePasswordToken token = new UsernamePasswordToken("zhang3", "123123");
            try {
                subject.login(token);
            } catch (AuthenticationException e) {
                e.printStackTrace();
            }
            //验证是否通过
            System.out.println(subject.isAuthenticated());
        }
    
    }
    

    异常

    IncorrectCredentialsException:密码输入错误
    
    UnknownAccountException:账户对比失败
    
    DisabledAccountException:帐号被禁用
    
    LockedAccountException:帐号被锁定
    
    ExcessiveAttemptsException:登录失败次数过多
    
    ExpiredCredentialsException:凭证过期
    

    底层认证思路

    public class MyRealm extends AuthenticatingRealm{
        @Override
        protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        /**
        * 假装查询数据库
        *
        *
        */
    		//获取用户名
            String principal = (String) authenticationToken.getPrincipal();
            if (principal.equals("zhang3")){
                SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo("zhang3", "123123", this.getName());
                return simpleAuthenticationInfo;
    
            }
            return null;
    	}	
    
    }
  • 相关阅读:
    关于jsp
    NASA: A Closer View of the Moon(近距离观察月球)
    NASA: Seeing Jupiter(注视木星)
    NASA: SpaceX的猎鹰9号火箭将龙飞船发射到国际空间站
    导航狗IT周报第十五期(July 8, 2018)
    导航狗IT周报-2018年05月27日
    导航狗IT周报-2018年05月18日
    小苹果WP(实验吧-隐写术)
    Python实现猜数字游戏1.0版
    代码方式设置WordPress内所有URL链接都在新标签页打开
  • 原文地址:https://www.cnblogs.com/adrien/p/10218899.html
Copyright © 2020-2023  润新知