在web中, 用户输入用户名密码登录,我们需要用这些信息和已经注册存在在数据库中的账户信息进行对比,判断用户名和密码是否正确。
shiro提供了自定义realm的实现来进行处理对不同数据源的校验:
realm就是一个安全数据源。可以将其看作为数据库的另一层封装,连接了应用和db用户提交的数据流到reaml中,reaml中存着数据库中的账户信息,因此进行对比。
- 先调用Subject.login(token)进行登录,会自动委托给Security Manager,调用前必须通过SecurityUtils. setSecurityManager()设置;
- SecurityManager负责真正的身份验证逻辑;它会委托给Authenticator进行身份验证;
- Authenticator才是真正的身份验证者,Shiro API中核心的身份认证入口点,此处可以自定义插入自己的实现;
- Authenticator可能会委托给相应的AuthenticationStrategy进行多Realm身份验证,默认ModularRealmAuthenticator会调用AuthenticationStrategy进行多Realm身份验证;
- Authenticator 会把相应的token传入Realm,从Realm 获取身份验证信息,如果没有返回/抛出异常表示身份验证失败了。此处可以配置多个Realm,将按照相应的顺序及策略进行访问。