zoukankan      html  css  js  c++  java
  • shiro入门

    配置流程:

      一、创建ini配置文件、配置参数。

      规则如下:

    1.[users]部分

    #提供了对用户/密码及其角色的配置,用户名=密码,角色1,角色2 

    username=password,role1,role2

    例如:

    配置用户名/密码及其角色,格式:“用户名=密码,角色1,角色2”,角色部分可省略。如:

    [users] 

    zhang=123,role1,role2 

    wang=123    

    2. [roles] 

    #提供了角色及权限之间关系的配置,角色=权限1,权限2 

    role1=permission1,permission2

    例如:

    配置角色及权限之间的关系,格式:“角色=权限1,权限2”;如:

    [roles] 

    role1=user:create,user:update 

    role2=*  

    如果只有角色没有对应的权限,可以不配roles

    3. [main]部分

    提供了对根对象securityManager及其依赖对象的配置。

    创建对象

    securityManager=org.apache.shiro.mgt.DefaultSecurityManager 

    其构造器必须是public空参构造器,通过反射创建相应的实例。

    1、对象名=全限定类名  相对于调用public无参构造器创建对象

    2、对象名.属性名=值   相当于调用setter方法设置常量值

    3、对象名.属性名=$对象引用   相当于调用setter方法设置对象引用

    4.[urls] 

    #用于web,提供了对web url拦截相关的配置,url=拦截器[参数],拦截器 

    /index.html = anon 

    /admin/** = authc, roles[admin],perms["permission1"]

    5.非标签。不同种类数据注入方式

      5.1 Map setter注入

    即格式是:map=key:value,key:value,可以注入常量及引用值,常量的话都看作字符串

    例如:

    authenticator.map=$jdbcRealm:$jdbcRealm,1:1,key:abc

      5.2Array/Set/List setter注入 

    多个之间通过“,”分割。

    例如:

    authenticator.array=1,2,3 

    authenticator.set=$jdbcRealm,$jdbcRealm

    5.3嵌套属性setter注入 

    例如:

    securityManager.authenticator.authenticationStrategy=$authenticationStrategy

    5.4对象引用setter注入

    authenticator=org.apache.shiro.authc.pam.ModularRealmAuthenticator 

    securityManager.authenticator=$authenticator

     5.5创建对象

    其构造器必须是public空参构造器,通过反射创建相应的实例

    securityManager=org.apache.shiro.mgt.DefaultSecurityManager

    二、创建一个测试类

      1、创建容器

      2、构建信息校验对象

      3、通过容器获得一个身份对象

      4、校验

      5、通过校验后返回的subject对象,获取权限信息

    package my.shiroTest;
    
    import org.apache.shiro.SecurityUtils;
    import org.apache.shiro.authc.AuthenticationException;
    import org.apache.shiro.authc.AuthenticationToken;
    import org.apache.shiro.authc.UsernamePasswordToken;
    import org.apache.shiro.config.IniSecurityManagerFactory;
    import org.apache.shiro.mgt.SecurityManager;
    import org.apache.shiro.subject.Subject;
    
    public class ShiroMain {
        public static void main(String[] args) {
            //创建容器,通过shiro-core.config.IniSecurityManagerFactory ,读取配置文件
            //创建工厂对象,然后再通过工厂对象获得securityManager对象
            
            IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
            //获得securityManager对象
            SecurityManager securityManager = factory.getInstance();
            
            //通过SecurityUtils工具类,设置使用的安全管理器为securityManager
            SecurityUtils.setSecurityManager(securityManager);
            
            //获取校验对象token,和配置文件中的配置信息对比
            AuthenticationToken token = new UsernamePasswordToken("root", "123456");
            
            //通过帮助类SecurityUtils,在容器中获取一个空的校验返回对象subject
            Subject subject = SecurityUtils.getSubject();
            
            //校验用于名和密码,校验通过,将会登录用户信息填入subject中,否则为空
            try {
                Subject resultSubject = securityManager.login(subject, token);
                System.out.println(" 用户名" + resultSubject.getPrincipal());
                System.out.println(resultSubject.isAuthenticated());
            } catch (AuthenticationException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
  • 相关阅读:
    java入门-使用idea创建web项目
    java入门-gitlab
    linux基础:source和sh的区别
    github基本使用
    docker-compose
    k8s学习笔记之六:flannel网络配置
    计算机网络
    python自学之路--python面试题
    ASP.NET前后端分离框架(转载)
    ASP.NET Core初步使用Quartz.NET(转载)
  • 原文地址:https://www.cnblogs.com/cdeelen/p/11104568.html
Copyright © 2011-2022 走看看