Shiro主要包括四大部分:认证,授权,session管理和加密
1.认证:是一个身份验证的过程,要证明他们的身份,需要提供principals(身份)和credentials(凭证)。身份有多种,包括邮箱,账号等能表示subject身份的信息,凭证有密码,指纹,数字证书等。一般就是登录,获取账号和密码。
认证过程主要分为三步:
step1:收集subject的principals(身份)和credentials(凭证)
首先拿到当前currentUser,
Subject currentUser = SecurityUtils.getSubject();
1.1利用currentUser可以获取用户相关信息。
例如获取到登录用户的账号和密码
currentUser.getPrincipal()
currentUser.get.Credentials()
1.1.1判断用户是否拥有某个角色
currentUser.hasRole()
1.1.2是否用于某种权限
currentUser.isPermitted()
1.2收集用户的principal和credentials。
//注意,此处的username和password是当前登录用户的账号和密码,也就是说是从登录页面传过来的。
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
step2:提交用于身份验证的身份和凭证。步骤一将收集到的身份和凭证封装为token,我们需要将token提交给shiro,以进行身份验证尝试。
currentUser.login(token);
step3:处理成功或失败
如果成功登录,即为验证通过,调用isAuthenticated()将会返回true,但如果登陆失败,例如账号密码错误,账号被锁定等,我们希望能看到失败信息,即抛出异常。
try{
currentUser.login(token);
}catch(UnknownAccountException uae){
//账号错误
...
}catch(IncorrectCredentials ice){
//密码错误
...
}catch(LockedAccountException lae){
//账号被锁定
...
}catch(AuthenticationException ae){
//unexcepted errot?
...
}