A very basic abstract extension point for the {@link Realm} interface that provides caching support for subclasses. <p/> It also provides a convenience method, {@link #getAvailablePrincipal(hunt.shiro.subject.PrincipalCollection)}, which is useful across all realm subclasses for obtaining a realm-specific principal/identity. <p/> All actual Realm method implementations are left to subclasses.