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