• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
Y-wee
博客园    首页    新随笔    联系   管理     

shiro基于ini文件入门案例

shiro基于ini文件入门案例

1、导包

如果测试类不在测试环境下,则改变依赖作用范围为compile

<dependencies>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.4.1</version>
    </dependency>
    <!-- Shiro uses SLF4J for logging.  We'll use the 'simple' binding
         in this example app.  See http://www.slf4j.org for more info. -->
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-simple</artifactId>
        <version>1.7.21</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>jcl-over-slf4j</artifactId>
        <version>1.7.21</version>
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
</dependencies>

2、创建ini文件

文件放在类路径下

# 配置用户
[users]
yl01=1111,role1
yl02=1111,role2
yl03=1111,role1,role2
yl04=1111,role3

# 配置角色
[roles]
role1=user:query,user:add,user:update,user:delete,user:export
role2=user:query,user:add
role3=*:*

3、测试

package com.yl.shiro;

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;
import org.apache.shiro.util.Factory;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Arrays;


/**
 * 测试类
 */
public class ShiroTest {
    //日志输出工具
    private static final transient Logger log = LoggerFactory.getLogger(ShiroTest.class);

    public static void main(String[] args) {
        log.info("My First Apache Shiro Application");
        //创建安全管理器的工厂对象
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
        //使用工厂创建安全管理器对象
        SecurityManager securityManager = factory.getInstance();
        //把安全管理器绑定到当前线程
        SecurityUtils.setSecurityManager(securityManager);
        //得到主体对象
        Subject currentUser = SecurityUtils.getSubject();
        //封装用户对象
        AuthenticationToken token=new UsernamePasswordToken("yl01","1111");
        //进行认证
        try {
            currentUser.login(token);
            System.out.println("认证通过");
        } catch (AuthenticationException e) {
            System.out.println("用户名或密码错误");
        }

        //判断用户是否认证通过
        boolean authenticated=currentUser.isAuthenticated();

        //单个角色判断
        boolean role2=currentUser.hasRole("role1");
        //批量角色分开判断
        boolean[] booleans=currentUser.hasRoles(Arrays.asList("role1","role2"));
        //批量角色同时判断
        boolean allRoles=currentUser.hasAllRoles(Arrays.asList("role1","role2"));

        //用户单个权限判断
        boolean permitted=currentUser.isPermitted("user:query");
        //用户多个权限分开判断
        boolean[] permitted1=currentUser.isPermitted("user:query","user:add");
        //用户多个权限同时判断
        boolean permittedAll=currentUser.isPermittedAll("user:add","user:add","user:query");

        //用户注销
        currentUser.logout();

    }

}
记得快乐
posted @ 2020-11-06 17:11  Y-wee  阅读(142)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3