第十讲 shiro (6)shiro认证过程分析

时间:2021-12-06 03:33:35

index.jsp提交到控制器,

控制器接收后形成一个入场券UsernamePasswordToken;

同时用Subject subject = SecurityUtils.getSubject(); 把用户抽象化,就是把用户抽象成一个要入场的“物件”;

再用这个“物件”带上“入场券”去登录:subject.login(token);

此时就转到自己写得MyRealm类中去认证和授权了。

首先执行的是protected AuthenticationInfo doGetAuthenticationInfo()函数,

用String username = token.getPrincipal().toString() ;获得你从subjct.login(token)中发过来的账号和密码,

用User user = userdao.findUserByUserName(username) ;去查找数据库中的账号和密码;

AuthenticationInfo authenticationInfo =
            new SimpleAuthenticationInfo(user.getUsername(),user.getPassword(),"a") ;
            System.out.println("成功了吗?");

            return authenticationInfo ;

如果比对成功,就返回authenticationInfo这个新的入场券。比对的过程是在框架中自动进行的。

    /**
     * shiro什么时候会进入doGetAuthorizationInfo进行授权呢?
     * 1、subject.hasRole(“admin”) 或 subject.isPermitted(“admin”):自己去调用这个是否有什么角色或者是否有什么权限的时候;
     * 2、@RequiresRoles("admin") :在方法上加注解的时候;
     * 3、[@shiro.hasPermission name = "admin"][/@shiro.hasPermission]:在页面上加shiro标签的时候,
     * 即进这个页面的时候扫描到有这个标签的时候。
     */