備忘錄八:Shiro核心類
一: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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 備忘錄九:Spring Boot+Shiro許可權管理Spring Boot
- 菜鳥初學Java的備忘錄(八) (轉)Java
- 備忘錄
- 【備忘錄】
- 備忘錄模式模式
- iOS備忘錄iOS
- JUnit備忘錄
- CSS備忘錄CSS
- RabbitMQ備忘錄MQ
- Python 備忘錄Python
- Java備忘錄《集合》Java
- 網站備忘錄網站
- rman命令備忘錄
- Eigen備忘錄
- 備忘錄模式(Memento)模式
- Java備忘錄《“==” 和 “equals”》Java
- Dart 學習備忘錄Dart
- linux 備忘記錄Linux
- JavaMementoPattern(備忘錄模式)Java模式
- 19_備忘錄模式模式
- 開發 備忘錄 - 雜
- 設計模式----備忘錄模式設計模式
- [譯] Flutter 佈局備忘錄Flutter
- Docker部署禪道備忘錄Docker
- 常用工具備忘錄
- 第 22 章 備忘錄模式模式
- Android備忘錄《幀動畫》Android動畫
- 萌新(我)的Git備忘錄Git
- 設計模式 - 備忘錄模式設計模式
- Backgroundcheck:Google隱私備忘錄Go
- WPF備忘錄四(事件動畫)事件動畫
- 初學Java的備忘錄Java
- 運維指令碼備忘錄運維指令碼
- 實驗 20:備忘錄模式模式
- 如何給備忘錄設計密碼?Mac上備忘錄設定密碼教程密碼Mac
- Docker 常用命令備忘錄Docker
- 行為型模式:備忘錄模式模式
- 伺服器遷移備忘錄伺服器