shiro 内置Realm(IniRealm和JdbcRealm)

本文详细介绍了使用Shiro框架进行权限验证的两种方法:通过IniRealm读取ini配置文件进行认证和授权,以及利用JdbcRealm结合自定义SQL查询数据库实现用户认证与权限分配。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

1、IniRealm

  • 建立ini文件
[users]
Mark=123456,admin
[roles]
admin=user:add,user:delete,user:update,user:select
  • 代码
	// IniRealm 测试
    @Test
    public void testAuthenticationIniRealm () {

        IniRealm iniRealm = new IniRealm("classpath:user.ini");

        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(iniRealm);

        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("Mark", "123456");
        subject.login(token);

        System.out.println("是否认证:" + subject.isAuthenticated());

        subject.checkRole("admin");
        subject.checkPermission("user:delete");

    }

2、jdbcRealm

默认的SQL
在这里插入图片描述


	//创建数据源
    DruidDataSource druidDataSource = new DruidDataSource();

    {
        druidDataSource.setUrl("jdbc:mysql://127.0.0.1:3306/test");
        druidDataSource.setUsername("root");
        druidDataSource.setPassword("root");
    }

    // JdbcRealm 测试 Shiro SQL
    @Test
    public void testAuthenticationShiroSQL() {

        JdbcRealm jdbcRealm = new JdbcRealm();
        jdbcRealm.setDataSource(druidDataSource);
        jdbcRealm.setPermissionsLookupEnabled(true);

        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(jdbcRealm);

        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("xfsy", "xfsy2018");
        subject.login(token);

        System.out.println("是否认证:" + subject.isAuthenticated());

        subject.checkRole("user");
        subject.checkPermission("user:select");

    }

    // JdbcRealm 测试 Custom SQL
    @Test
    public void testAuthenticationCustomSQL() {

        JdbcRealm jdbcRealm = new JdbcRealm();
        jdbcRealm.setDataSource(druidDataSource);
        jdbcRealm.setPermissionsLookupEnabled(true);

        /**
         * @see JdbcRealm
         */
        String sql = "select pwd from tusers where username = ?";
        jdbcRealm.setAuthenticationQuery(sql);
        //角色
        String roleSql = "SELECT ROLE_NAME FROM TEST_USER_ROLE WHERE USER_NAME=?";
        jdbcRealm.setUserRolesQuery(roleSql);
        DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
        defaultSecurityManager.setRealm(jdbcRealm);

        SecurityUtils.setSecurityManager(defaultSecurityManager);
        Subject subject = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken("test", "123");
        subject.login(token);
        subject.checkRole("user");
        System.out.println("是否认证:" + subject.isAuthenticated());
    }
    ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值