zoukankan      html  css  js  c++  java
  • shiro角色与权限

    shiro角色与权限

    shiro在认证过程中,会判断该用户是否含有一定的权限或者角色,其中位于顶层的接口为AuthorizationInfo,其继承体系如下:

    AuthorizationInfo:为用户在认证的过程中,会将相应的角色与权限封装到AuthorizationInfo中,后面会根据该信息进行权限与角色的校验。其中AuthorizationInfo主要封装了如下三个方法:

    public interface AuthorizationInfo extends Serializable {
    
        /**
         * 返回分配给相应主题的所有角色的名称。
         */
        Collection<String> getRoles();
    
        /**
         * 返回对应主体的所有的权限
         */
        Collection<String> getStringPermissions();
    
        /**
         * 返回权限
         */
        Collection<Permission> getObjectPermissions();
    

    SimpleAuthorizationInfo:为AuthorizationInfo的默认建单实现,封装了角色与权限。

    SimpleAccount:除了含有用户角色与权限的信息外,添加了用户主体的信息,如:账号与密码

    shiro用户主体

    用户主体的校验顶级接口为AuthenticationInfo,其继承体系关系如下:

    SimpleAuthenticationInfo:里面封装了用户的主体身份和主体的凭证等信息

    shiro权限和角色认证示例代码如下

    drop table if EXISTS users;
    
    create table users (
                           id int auto_increment,
                           username varchar(20),
                           password varchar(20),
                           password_salt varchar(20),
                           constraint pk_users primary key(id)
    ) charset=utf8 ENGINE=InnoDB;
    
    insert into users(username,password)values('zhangsan','123');
    
    drop table if EXISTS user_roles;
    create table user_roles(
                               id bigint auto_increment,
                               username varchar(100),
                               role_name varchar(100),
                               constraint pk_user_roles primary key(id)
    ) charset=utf8 ENGINE=InnoDB;
    
    INSERT INTO user_roles VALUES(1,'zhangsan','admin');
    
    
    drop table if EXISTS roles_permissions;
    
    create table roles_permissions(
                                      id bigint auto_increment,
                                      role_name varchar(100),
                                      permission varchar(100),
                                      constraint pk_roles_permissions primary key(id)
    ) charset=utf8 ENGINE=InnoDB;
    
    
    INSERT INTO roles_permissions VALUES(1,'admin','update');
    
    //设置数据库链接
    ComboPooledDataSource dataSource = new ComboPooledDataSource();
    dataSource.setDriverClass("com.mysql.cj.jdbc.Driver");
    dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/shiro");
    dataSource.setUser("root");
    dataSource.setPassword("root");
    
    //创建DefaultSecurityManager
    DefaultSecurityManager securityManager = new DefaultSecurityManager();
    SecurityUtils.setSecurityManager(securityManager);
    //创建JdbcRealm
    JdbcRealm jdbcRealm = new JdbcRealm();
    jdbcRealm.setDataSource(dataSource);
    securityManager.setRealm(jdbcRealm);
    //认证的过程中,查看是否有相应的权限
    jdbcRealm.setPermissionsLookupEnabled(true);
    // get the currently executing user:
    Subject subject = SecurityUtils.getSubject();
    
    UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123");
    
    subject.login(token);
    //不跑出异常说明登录成功
    System.out.println("登录成功");
    
    subject.login(token);
    System.out.println();
    //不跑出异常说明登录成功
    System.out.println("登录成功");
    //判断是否有相应角色
    boolean admin = subject.hasRole("admin");
    System.out.println(admin);
    
    boolean update = subject.isPermitted("update");
    System.out.println(update);
    

    认证过程中主要调用

    doGetAuthenticationInfo(AuthenticationToken token):用于验证用户的身份的主体,主要为账号和密码
    doGetAuthorizationInfo(PrincipalCollection principals):主要验证用户的角色与权限

    示例代码

  • 相关阅读:
    关于iframe页面里的重定向问题
    iframe跨域解决方案
    sql 查询优化小计
    年轻不能遇见太惊艳的人
    图片上传预览
    脚本
    前端常见跨域解决方案
    react
    react高阶组件
    React + MobX 状态管理入门及实例
  • 原文地址:https://www.cnblogs.com/haizhilangzi/p/15016633.html
Copyright © 2011-2022 走看看