shiro使用方法

本文主要介绍了Apache Shiro的使用方法,包括认证的实现(登陆)、授权的处理、Shiro提供的Session管理、加密机制、缓存功能以及如何与Web应用集成。在环境配置部分,详细讲解了依赖的准备、代理过滤器配置、shiro.xml及shiro-ehcache.xml的设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

先写一个大纲能做什么

1.认证

2.授权

3.会话管理

4.加密

5.缓存

6.与Web集成

配置在最后边

认证

1:如何实现登陆

我们先捋一下登陆历程,我们点击登陆,
	1:前端数据发送到登陆控制器
    2:在控制器里面创建令牌,然后我们通过shiro的subject的对象调用login方法 传入令牌
    3:调用login,之后就交给安全管理器处理,安全管理器从realm拿到数据
    4:之后安全管理器 再次委托到 authenticator 传入数据源取来的数据 和token判断账户密码是否相等 
        这里是两种在认证里面获取传入username的方法
        //shiro 会帮我们创建密码是否正确 sql不需要加上密码的条件了
        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
        对象 principal = (对象)authenticationToken.getPrincipal();
	登陆流程实现图
        
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
            @RequestMapping("/userLogin")
    @ResponseBody
    public JsonResult login(String username, String password){
   
   
        //对密码进行加密
        Md5Hash md5Hash = new Md5Hash(password,username);
        //使用shiro的方式来做登陆功能(目的是 让shiro去改变subject的状态)
        Subject subject = SecurityUtils.getSubject();
        //把前端传来的用户名和密码封装一个令牌
        UsernamePasswordToken token = new UsernamePasswordToken(username,md5Hash.toString());
        //执行subject的登陆方法
        try {
   
   
            //因为只有这个地方法 有用户名密码错误,所以没有必要交给统一异常处理的
            subject.login(token);
        } catch (AuthenticationException e) {
   
   
            e.printStackTrace();
            return new JsonResult(false,"用户名密码错误");
        }
        return new JsonResult();

    }
->>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
        @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
   
   
        //shiro 会帮我们创建密码是否正确 sql不需要加上密码的条件了
        UsernamePasswordToken usernamePasswordToken = (UsernamePasswordToken) authenticationToken;
        //根据用户名查询员工,如果查询到代表用户名是存在的,把密码交给shiro判断  如果查不到就直接 返回空
        Employee employee = employeeMapper.selectByUsername(usernamePasswordToken.getUsername());
        //参数1:用户主要的信息 一般传入员工对象进入,登录成功后会与subject绑定在一起
        //参数2:用户的真正的密码
        //参数3:当前数据源的名字,暂时用不上
        //注意:第一个参数 参数传入什么 我们在subject就可以拿到什么
        if (employee != null) {
   
   
            return new SimpleAuthenticationInfo(employee, employee.getPassword(), employee.getName());
        } else {
   
   
            return null;
        }
    }

在这里插入图片描述

2:如何实现授权

我们先捋一下权限控制流程
    1:我们点击一个功能,会经过shiro的过滤器 会判断是否有权限
    2:然后doGetAuthorizationInfo(PrincipalCollection principalCollection) 这个方法
      最后返回一个info 就是当前角色拥有的所有所有权限
    3:我们只需在这里面获取当前类对象就可以 控制访问权限了
    4:对象 uzi = (对象)SecurityUtils.getSubject()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值