shiro 内置Realm(IniRealm和JdbcRealm)

shiro 内置Realm(IniRealm和JdbcRealm)

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
shiro 内置Realm(IniRealm和JdbcRealm)


	//创建数据源
    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());
    }
    ```