shiro授权和认证(一)

shiro是什么

shiro一个授权和认证的这样一个框架

简单的给你说、就是以前咋们认证和授权的所有代码、shiro都给咋们写好了、而且封装好了、我们只需要按照这个框架提供的API来简单的集成到咋们的项目中就可以了

1、shiro能干什么

认证、授权、Cache的管理、Session的管理、rememberMe功能的实现、登陆、退出…

2、shiro的整体架构是什么

在这里插入图片描述

3、shiro的第一个helloworld程序

3.1、导包
  <!--导入shiro的包-->
        <dependency>
            <groupId>org.apache.shiro</groupId>
            <artifactId>shiro-all</artifactId>
            <version>1.3.2</version>
        </dependency>
3.2、在resource下创建模拟数据库的文件
[users]
admin=123
zhangsan=123
3.3、编写测试代码完成用户的认证
public static void main(String[] args){
        //获取安全管理器的工厂
        IniSecurityManagerFactory securityManagerFactory = new IniSecurityManagerFactory("classpath:shiro.ini");
        //通过安全管理器的工厂 获取安全管理器
        SecurityManager securityManager = securityManagerFactory.createInstance();
        //将安全管理器设置到运行环境中
        SecurityUtils.setSecurityManager(securityManager);
        //获取当前操作的主体
        Subject subject = SecurityUtils.getSubject();
        //接下来就应该将用户名和密码丢进去测试了
        //用户名  和  密码  =====> 应该是前端页面传过来的
        //创建token
        UsernamePasswordToken passwordToken = new UsernamePasswordToken("admin","123");
        //传递token进行校验
        subject.login(passwordToken);
        //这里的校验是去 shiro的内部进行校验
        System.out.println("用户的认证状态:"+subject.isAuthenticated());
        subject.logout();
        System.out.println("用户的状态是:"+subject.isAuthenticated());
    }

4、源码的解读

在这里插入图片描述

DelegatingSubject.java

在这里插入图片描述

DefaultSecurityManager.java

在这里插入图片描述

AuthenticatingSecurityManager.java

在这里插入图片描述

AbstractAuthenticator.java

在这里插入图片描述

ModularRealmAuthenticator.java

在这里插入图片描述
在这里插入图片描述

AuthenticatingRealm.java

在这里插入图片描述

SimpleAccountRealm.java

在这里插入图片描述

比较密码的时候执行的方法AuthenticatingRealm.java

在这里插入图片描述

HashedCredentialsMatcher.java

在这里插入图片描述

SimpleCredentialsMatcher.java

在这里插入图片描述

5、源码的流程图

在这里插入图片描述

6、自定义realm的实现

6.1、自定义一个realm
public class MyRealm extends AuthorizingRealm {

    private UserDAO userDAO=new UserDAO();

    @Override
    public String getName() {
        return "MyRealm";
    }

    /**
     *这个方法是用来进行认证的
     * @param authenticationToken
     * @return
     * @throws AuthenticationException
     */
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //第一步:通过token获取到用户数据
        String userName = (String) authenticationToken.getPrincipal();
        //第二步:通过用户名 去数据库查询用户对象
        User user=null;
        try {
            user = userDAO.findUserByName(userName);
            System.out.println("从数据库查询出来的数据是:"+user);
        } catch (Exception e) {
            System.out.println("查询失败:"+e.fillInStackTrace());
        }
        if(null==user){   //说明数据库里面没有查询出数据来
            return null;
        }
        //用户信息查询出来了
        //User user = new User(1, "admin", "123");
        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(user.getUserName(),user.getPassword(),getName());
        return simpleAuthenticationInfo;
    }
    /**
     * 做用户授权的
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }
}
6.2、编写配置文件
[main]
customRealm=com.qf.shiro.realm.MyRealm
securityManager.realms=$customRealm

7.shiro中常见的名词解释

Subject:登陆的这个用户(用户、程序) 、谁认证那么这个主体就是谁
Principal:用户名(还可以是用户信息的封装)
Credential:密码
Token:令牌(用户名+密码的封装)----进行进行认证的封装对象

​ 这个的对象并不是前后分离的这个token

Security Manager:安全管理器(只要使用了shiro框架那么这个对象都是必不可少的)
Authenticator:认证器(主要做用户身份认证、简单跟你说就是用来登陆的时候做身份校验的)
Authrizer:授权器(简单的说就是用来做用户的授权的)
Realm:用户认证和授权的时候 和数据库交互的对象(这里面干的事情就是从数据库查询数据 封装成token然后取进行认证和授权)

8、常见的两个异常

8.1、用户名不对的异常
Exception in thread "main" org.apache.shiro.authc.UnknownAccountException
8.2、密码不对的异常
Exception in thread "main" org.apache.shiro.authc.IncorrectCredentialsException
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shiro框架是一个功能强大的Java安全框架,可以用于认证授权。下面是使用Shiro进行认证授权的基本步骤: 1. 添加Shiro依赖:在你的项目中添加Shiro的相关依赖,可以通过Maven或者Gradle进行引入。 2. 配置Shiro:创建一个Shiro的配置文件(通常是一个ini文件),配置Shiro的一些基本信息,例如Realm、Session管理等。你可以根据你的需求进行配置。 3. 创建Realm:Realm是Shiro用来进行认证授权的核心组件。你需要实现一个自定义的Realm来实现用户的认证授权逻辑。在Realm中,你可以通过重写相应的方法来实现自定义的认证授权逻辑,例如验证用户名密码、查询用户角色和权限等。 4. 认证:在用户登录时,你可以通过调用Shiro提供的Subject.login方法来进行认证。该方法会将用户提交的用户名和密码传递给你自定义的Realm进行验证。如果验证通过,Shiro会将用户信息保存在Session中。 5. 授权:在用户进行操作时,你可以通过调用Shiro提供的Subject.hasRole和Subject.isPermitted方法来进行授权判断。这些方法会根据你在Realm中配置的角色和权限信息进行判断,决定用户是否具有相应的角色或权限。 以上是使用Shiro进行认证授权的基本步骤,你可以根据具体的需求进行定制和扩展。在实际应用中,你还可以通过Shiro提供的其他功能,如RememberMe、Session管理等来增强安全性和用户体验。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值