二、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:凭证过期

底层认证思路

1578595-20190104112550903-2043229919.png

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;
    }   

}

转载于:https://www.cnblogs.com/adrien/p/10218899.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值