shiro入门

时间:2019-06-28 21:16:09   收藏:0   阅读:118

配置流程:

  一、创建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();
        }
    }
}

 

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!