您的位置:首页 > 其它

Shiro安全框架03:自定义realm认证

2019-06-06 23:20 330 查看

第一步:在ini文件中配置

[code]myRealm= com.ctbu.MyRealm
securityManager.realms=$myRealm

第二步:编写自定义realm

[code]public class MyRealm extends AuthorizingRealm {

/**
* 认证
*/
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {
//判断当前用户是否存在
//获取用户名
String username = (String)token.getPrincipal();
//从数据库中取出用户名和密码
String name ="hello";
String password = "1234";

//判断用户名是否相等
if (!name.equals(username)){
return null;
}

//这里的this.getName()获得的是类的名字
SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, password, this.getName());
return info;
}

/**
* 授权
*/
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
return null;
}
}

第三步:运行认证

[code]public static void main(String[] args) {
/**
* 1.构建securityManager工厂
* 2.通过工厂创建securityManager
* 3.将securit
4000
yManager设置到运行环境中
* 4.创建一个Subject实例
* 5.创建token令牌
* 6.用户登录
* 7.用户退出
*/
// 1.构建securityManager工厂
IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");
//2.通过工厂创建securityManager
SecurityManager securityManager = factory.getInstance();
//3.将securityManager设置到运行环境中
SecurityUtils.setSecurityManager(securityManager);
//4.创建一个Subject实例
Subject subject = SecurityUtils.getSubject();
//5.创建token令牌
UsernamePasswordToken token = new UsernamePasswordToken("hello", "1234");

try {
//6.用户登录
subject.login(token);
} catch (UnknownAccountException e) {
System.out.println("账号不存在");
} catch (IncorrectCredentialsException e){
System.out.println("密码不正确");
}

System.out.println("认证是否成功"+subject.isAuthenticated());
//7.用户退出
subject.logout();
System.out.println("认证是否成功"+subject.isAuthenticated());
}

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: