
认证是一个确认身份凭证的过程,证明一个用户是不是合法的。要确认一个用户是不是合法的,需要用户提供一个身份(principals)和凭证(credentials)。
- Principals是用户提供的,能唯一标识一个用户的东西。可以是一个用户名,或者邮箱地址等能唯一表示用户的事物。
- Credentials通常是只有用户自身才知道的一个凭证。通常是密码,或者X.509格式的证书等。
认证的过程
认证一个用户的过程通常有三步:
//Example using most common scenario of username/password pair:UsernamePasswordToken token = new UsernamePasswordToken(username, password);//"Remember Me" built-in:token.setRememberMe(true);
在这里我们使用的是UsernamePasswordToken,支持常用的用户名和密码认证操作。它实现的是org.apache.shiro.authc.AuthenticationToken认证系统最基本的接口。
Shiro并不关注username和password是怎么来的,可以是从html表单中或者是http请求头里获取的,或者其他的途径。这对shiro来说,都是一样的。
提交身份和凭证
Subject currentUser = SecurityUtils.getSubject();currentUser.login(token);
认证结果处理
Shiro的认证运行时异常AuthenticationException下有很多个子类。通过catch不同的异常,可以大概得知认证失败的原因。
try {currentUser.login(token);} catch ( UnknownAccountException uae ) { ...} catch ( IncorrectCredentialsException ice ) { ...} catch ( LockedAccountException lae ) { ...} catch ( ExcessiveAttemptsException eae ) { ...} ... catch your own ...} catch ( AuthenticationException ae ) {//unexpected error?}//No problems, continue on as expected...
认证的执行流程

