IniRealm是把用户信息放到ini文件中,实际开发的话都会放到数据库
@Test
public void testAuthtication(){
//创建核心部分的对象(SecurityManager)
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
//创建Realm
IniRealm 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");
}
@Test
public void testAuthtication(){
//创建核心部分的对象(SecurityManager)
DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();
//创建Realm
JdbcRealm jdbcRealm = new JdbcRealm();
//设置值数据源
jdbcRealm.setDataSource(dataSource);
//设置权限开关(默认为false)
//jdbcRealm.setPermissionsLookupEnabled(true);
//自定义SQL
String 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);
}