備忘錄八:Shiro核心類

百聯達發表於2019-10-15

一:SessionManager

1.簡介

Shiro提供了完整的會話管理功能,不依賴底層容器,JavaSE應用和JavaEE應用都可以使用。

SessionManager管理著應用中所有Subject的會話,包括會話的建立,維護,刪除,失效,驗證等工作。

2.SessionManager介面

Session start(SessionContext context); 基於指定的上下文初始化資料啟動新會話

Session getSession(SessionKey key) throws SessionException;

根據指定的SessionKey檢索會話,如果找不到則返回null。如果找到了會話,但會話但無效(已停止或已過期)則丟擲SessionException異常。

3.AbstractSessionManager implements SessionManager

 public void setGlobalSessionTimeout(long globalSessionTimeout)

 設定全域性Session的超時時間,預設為30分鐘。設定為負數表示永遠都不超時。

4.AbstractValidatingSessionManager extends AbstractNativeSessionManager

protected boolean sessionValidationSchedulerEnabled;

是否進行Session驗證

protected long sessionValidationInterval;

Session驗證的時間間隔,預設為一小時

5.public class DefaultSessionManager extends AbstractValidatingSessionManager

private boolean deleteInvalidSessions;

是否刪除無效的Session

6.public class DefaultWebSessionManager extends DefaultSessionManager

  private boolean sessionIdCookieEnabled;

  是否從Cookie中獲取sessionId

  private boolean sessionIdUrlRewritingEnabled;

二:AuthenticationToken

AuthenticationToken 用於收集使用者提交的身份(如使用者名稱)及憑據(如密碼)。Shiro會呼叫CredentialsMatcher物件的

doCredentialsMatch方法對AuthenticationInfo物件和AuthenticationToken進行匹配。匹配成功則表示主體(Subject)認證成功,否則表示認證失敗。

一般情況下UsernamePasswordToken已經可以滿足我們的大我數需求。當我們遇到需要宣告自己的Token類時,可以根據需求來實現AuthenticationToken,

HostAuthenticationToken或RememberMeAuthenticationToken。

三:Realm

Realm是安全驗證資料的資料來源。

1.public interface Realm 

String getName();

boolean supports(AuthenticationToken token);

AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException;

四:Subject與SubjectFactory

1.public interface Subject

一個Subject代表著應用的一個使用者。

Object getPrincipal();

Subject的唯一標識,比如使用者名稱,使用者ID,手機號等

PrincipalCollection getPrincipals();

boolean isPermitted(String permission);

boolean isPermitted(Permission permission);

boolean[] isPermitted(String... permissions);

boolean[] isPermitted(List<Permission> permissions);

void checkPermission(String permission) throws AuthorizationException;

void checkRole(String roleIdentifier) throws AuthorizationException;

void login(AuthenticationToken token) throws AuthenticationException;

boolean isAuthenticated();

boolean isRemembered();

2.public interface WebSubject extends Subject, RequestPairSource

ServletRequest getServletRequest();

ServletResponse getServletResponse();

3.public class DelegatingSubject implements Subject

  protected PrincipalCollection principals;

  protected boolean authenticated;

  protected String host;

  protected Session session;

  protected boolean sessionCreationEnabled;

  protected transient SecurityManager securityManager;

4.public class WebDelegatingSubject extends DelegatingSubject implements WebSubject

5.public interface SubjectContext extends Map<String, Object>

SubjectContext 將構建Subject的所有屬性都組織到一起,然後傳遞給一個SubjectFactory,用於構成一個Subject.

6.public interface SubjectFactory

Subject createSubject(SubjectContext context);

建立Subject

7.public class DefaultSubjectFactory implements SubjectFactory

8.public class DefaultWebSubjectFactory extends DefaultSubjectFactory 

五:SecurityManager

1.public interface SecurityManager extends Authenticator, Authorizer, SessionManager

Subject login(Subject subject, AuthenticationToken authenticationToken) throws AuthenticationException;

登入

void logout(Subject subject);

登出

Subject createSubject(SubjectContext context);

2.public abstract class CachingSecurityManager implements SecurityManager, Destroyable, CacheManagerAware, EventBusAware

   private CacheManager cacheManager;

   private EventBus eventBus;

3.public abstract class RealmSecurityManager extends CachingSecurityManager

 private Collection<Realm> realms;

許可權集合realms

4.public abstract class AuthenticatingSecurityManager extends RealmSecurityManager

private Authenticator authenticator;

SecurityManager用於身份驗證操作的具體例項

5.public abstract class AuthorizingSecurityManager extends AuthenticatingSecurityManager

 private Authorizer authorizer;

SecurityManager用於授權操作的具體例項

6.public abstract class SessionsSecurityManager extends AuthorizingSecurityManager

 private SessionManager sessionManager;

SecurityManager用於管理所有Session的具體例項。

7.public class DefaultSecurityManager extends SessionsSecurityManager

    protected RememberMeManager rememberMeManager;

   記著引用中與當前Subject關聯的Seeion,免重新登入

    protected SubjectDAO subjectDAO;

   Subject的持久化儲存

    protected SubjectFactory subjectFactory;

   建立應用Subject的工廠

8.public class DefaultWebSecurityManager extends DefaultSecurityManager implements WebSecurityManager

boolean isHttpSessionMode();

是否使用Servlet 容器的HttpSession


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2659976/,如需轉載,請註明出處,否則將追究法律責任。

相關文章