在前面的介绍中,我提到过真正的安全逻辑其实都在Pluggable Realms里面,那么今天我们就来讨论一下这个安全域Realm。
这个是网上找到的一张图,描述了从Realm的派生出的所有类。其中抽象类AuthenticatingRealm,顾名思义,应该是用于认证,AuthorizingRealm用于授权,但是因为AuthorizingRealm又是从AuthenticatingRealm继承出来的,所以,其实我们常用的是直接从AuthorizingRealm派出一个自定义的安全域,比如示例中的HelloWorldRealm(参见我在GitHub上的代码)。
说些题外话,从上面这张图,我们也可以看到,Shiro帮我们实现了很多缺省的Realm,比如PropertiesRealm,IniRealm,如果你的系统很简单,就想直接在文本文件中放几个账户信息,可以直接使用它们。
现在我们先看看认证的代码,也就是doGetAuthenticationInfo()。
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken)
throws AuthenticationException {
UsernamePasswordToken token = (UsernamePasswordToken) authcToken;
String uname = token.getUsername();
String upassword = String.valueOf(token.getPassword());
// 事实上,你应该连到真正的数据源去鉴权