zoukankan      html  css  js  c++  java
  • Shiro简单入门

    1:关键对象

    subject:主体,理解为用户,可能是程序,都要去访问系统的资源,系统需要对subject进行身份的认证.

    principal:身份信息,通常是唯一的,一个主体有多个身份信息,但是都有一个主的身份信息(primary principal)

    credential:凭证信息,可以是密码,证书,指纹。。。。

    总结:主体进行身份认证时需要提供身份信息和凭证 信息

    2:授权流程

    授权流程可以理解为: who 对what(which)资源进行how(怎样的) 操作

    who: 主体 即subject, subject在认证通过后系统进行访问控制

    what(which):资源(Resource),subject必须具备资源的访问权限才可以访问该资源.

    how:权限/许可(permission)subject对该资源有怎样的权限:如增加?删除?修改?

    3:权限模型

     最终演变成:(权限其实是针对于资源来说的)

    4:控制权限

    4-1基于角色的访问

    RBAC(role based access control)

    缺点:这种方式不利于系统维护(可扩展不强)

    4-2基于资源的访问  (建议使用这种)

    RBAC(resource based access control)

    5:粗粒度和细粒度权限

    5-1概念

    粗粒度权限管理:(页面的访问信息,仅仅能进页面,不能进行增删改查操作)对资源类型进行管理 比如:菜单, url连接, 用户添加页面, 类方法

    细粒度的权限管理:(数据级别的权限管理:如某个模块的增删改查) 对资源实例的权限管理 比如:资源类型的具体化 比如用户id为001的修改url,

    5-2如何实现粗粒度和细粒度的权限控制

    实现粗粒度: (一般使用框架来实现)

    比如:通过springMvc的拦截器实现授权(通过截取url 和数据库中拥有的权限资源做对比 没有就不会放行)

    实现细粒度:

    业务层实现控制

    6:权限框架实现权限控制 (主要用来实现控制粗粒度的权限控制)

     

    7: 不使用框架而是基于URL拦截的方式实现

         在实际开发中比较常用的方式

    8:Shiro

    入门实例

    package cn.shiro.authentication;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.config.IniSecurityManagerFactory;
    import org.apache.shiro.subject.Subject;
    import org.apache.shiro.util.Factory;
    import org.apache.shiro.mgt.SecurityManager;
    import org.junit.Test;
    
    public class AuthenticationTest {
    
        @Test
        public void testLoginAndLogout() {
            //需要创建一个securityManager工厂
            Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro-first.ini");
    
            //创建一个SecurityManager
            SecurityManager securityManager = factory.getInstance();
    
            //将securityManager设置到当前运行环境中
            SecurityUtils.setSecurityManager(securityManager);
    
    
            //获取到里面穿件的subject
            Subject subject = SecurityUtils.getSubject();
            //在认证提交前准备token(令牌)
            UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "111111");
            //执行提交
            try {
                subject.login(token);
    
            } catch (AuthenticationException e) {
                e.printStackTrace();
            }
    
            //是否验证通过
            boolean isAuthenticated = subject.isAuthenticated();
            System.out.println(isAuthenticated);
    
            //执行退出操作
            subject.logout();
        }
    }

    坚持
  • 相关阅读:
    口袋摸球
    后渗透(四)数据包捕获
    后渗透(二)权限提升
    文件上传11-21
    MySQL之UDF提权
    《白帽子讲Web安全》读书笔记(一)
    XSS盲打获取cookies&&XSS钓鱼&&XSS键盘记录
    nginx目录穿越漏洞复现&&nginx目录遍历漏洞复现
    python教程(一)·简介
    DataPipeline如何实现数据质量管理?
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12802660.html
Copyright © 2011-2022 走看看