当前位置: 代码迷 >> 综合 >> shiro的IniRealm、JDBCRealm
  详细解决方案

shiro的IniRealm、JDBCRealm

热度:27   发布时间:2024-02-13 14:00:40.0

IniRealm是把用户信息放到ini文件中,实际开发的话都会放到数据库

@Testpublic void testAuthtication(){//创建核心部分的对象(SecurityManager)DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//创建RealmIniRealm iniRealm = new IniRealm("classpath:user.ini");defaultSecurityManager.setRealm(iniRealm);//将Realm设置到核心中去//主体提交认证SecurityUtils.setSecurityManager(defaultSecurityManager);//工具类把核心对象设置到环境中Subject subject = SecurityUtils.getSubject();//工具类可以获取主体//认证数据UsernamePasswordToken token = new UsernamePasswordToken("0000", "000000");String message = null;try {subject.login(token);//提交认证,到这一步还没有指定Realms}catch (UnknownAccountException e){message = "账号不存在";}catch (IncorrectCredentialsException e){message = "密码错了";}if (subject.isAuthenticated() == true){//验证认证是否通过message = "登陆成功";}//subject.logout();//退出登录try {subject.checkRole("admin0");//检查角色subject.checkPermission("update");//检查权限}catch (UnauthorizedException e){System.out.println(e.getLocalizedMessage());}System.out.println(message);}

注意必须在身份认证通过的前提下才能验证角色和权限;
ini文件格式如下

[users]
0000=000000,admin0,管理员
[roles]
管理员=update,招人

JDBCRealm是要访问数据库里面的用户信息进行验证,
首先创建数据源连接数据库

//创建jdbc数据源DruidDataSource dataSource = new DruidDataSource();//设置url{dataSource.setUrl("jdbc:mysql://localhost:3306/test");dataSource.setUsername("root");dataSource.setPassword("0000");}@Testpublic void testAuthtication(){//创建核心部分的对象(SecurityManager)DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//创建RealmJdbcRealm jdbcRealm = new JdbcRealm();//设置值数据源jdbcRealm.setDataSource(dataSource);//设置权限开关(默认为false)//jdbcRealm.setPermissionsLookupEnabled(true);//自定义SQLString sql = "select password from user where user_name = ?";jdbcRealm.setAuthenticationQuery(sql);//自定义认证器jdbcRealm.setUserRolesQuery("select role_name from user_roles where user_name = ?");defaultSecurityManager.setRealm(jdbcRealm);//将Realm设置到核心中去//主体提交认证SecurityUtils.setSecurityManager(defaultSecurityManager);//工具类把核心对象设置到环境中Subject subject = SecurityUtils.getSubject();//工具类可以获取主体//认证数据UsernamePasswordToken token = new UsernamePasswordToken("debug", "80bab46abb7b1c4013f9971b8bec3868");String message = null;try {subject.login(token);//提交认证,到这一步还没有指定Realms}catch (UnknownAccountException e){message = "账号不存在";}catch (IncorrectCredentialsException e){message = "密码错了";}if (subject.isAuthenticated() == true){//验证认证是否通过message = "登陆成功";}subject.checkRole("000000");//检查角色//subject.logout();//退出登录// try {
// subject.checkRole("admin0");//检查角色
// subject.checkPermission("杀人");//检查权限
// }catch (UnauthorizedException e){
// System.out.println(e.getLocalizedMessage());
// }System.out.println(message);}
  相关解决方案