shiro基础入门

     	      					shiro 基础篇1
  • Subject(用户主体)
  • SecurityManager(核心安全管理器,认证授权都要经过该对象,相当于springmvc dispatcher)
  • realm(数据库)

认证过程
在这里插入图片描述
在这里插入图片描述

shiro常见异常:
在这里插入图片描述
realm接口体系
在这里插入图片描述
自定义realm

  • 一般都会继承AuthorizingRealm抽象类,因为该类具备了缓存,认证,授权的方法。
  1. 自定义realm类继承AuthorzingRealm
 /**
 1.  自定义realm
 */
public class MyRealm  extends AuthorizingRealm {

    //myrealm设置名字
    @Override
    public void setName(String name) {
        super.setName("myrealm");
    }

    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {
        return null;
    }

    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
        //参数 token ; 表示登录时包装的UsernamePasswordToken信息
        //获取用户名
        String username = token.getPrincipal().toString();
        System.out.println(token);
        if(!"zhangsan".equals(username)){
              return null;
        }
        String password= "123456";
        //info对象表示realm登录比对信息; 参数1,用户信息,餐数2,密码,参数3,当前reaml名字
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username,password,getName());
        return info;
    }
}
  1. 自定义realm文件
 #自定义realm
myrealm=com.yxt.realm.MyRealm
#指定securityManager的realms实现
securityManager.realms=$myrealm
  1. 加载配置文件,执行登录操作
  public static void main(String[] args) {
        //1.创建用户数据
        String username = "zhangsan";
        String password = "123456";
        // 2.创建factory工厂,从ini文件拿数据
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:my-shiro.ini");
        //3.使用factory创建SecurityManager (有shiro信息)
        DefaultSecurityManager securityManager = (DefaultSecurityManager) factory.getInstance();
        //4.将UserRealm注入到完全管理器
       /* securityManager.setRealm(new UserRealm2());*/
        //5.把当前安全管理器注入到线程中
        SecurityUtils.setSecurityManager(securityManager);
        //6.获得主体用户
        Subject subject = SecurityUtils.getSubject();
        //7.将用户名和密码封装到token
        UsernamePasswordToken token = new UsernamePasswordToken(username,password);
        //8.进行登录
        try {
            subject.login(token);//进行认证,如果失败会抛异常
            System.out.println("登陆成功");
        }catch (IncorrectCredentialsException e){
            System.out.println("密码不正确");
        }catch (UnknownAccountException e){
            System.out.println("用户名不存在");
        }catch (AuthenticationException e){
            System.out.println("用户名或密码正确");
        }
        // 登出
         subject.logout();
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值