0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Shiro功能介紹

科技綠洲 ? 來源:Java技術(shù)指北 ? 作者:Java技術(shù)指北 ? 2023-10-08 15:07 ? 次閱讀

記得做的第一個Web項目,系統(tǒng)認(rèn)證授權(quán)這塊就是基于Shiro實現(xiàn)的,當(dāng)時也是第一次接觸到這種類型的框架,同時是基于Spring做的集成,并且相關(guān)的配置都已經(jīng)是定制好的,只需要我們根據(jù)項目情況對極少部分配置進行修改即可使用。對于其原理也只是知道個大概,具體實現(xiàn)細(xì)節(jié)可以說是一無所知。

Shiro作為安全框架,相比其他同類型框架,在整體結(jié)構(gòu)上更顯得簡單且更易于理解,通過對Shrio的學(xué)習(xí),在理解里其實現(xiàn)原理后,對后面學(xué)習(xí)其他同類型的框架也會有很多幫助。

現(xiàn)在各種框架盛行,為解決企業(yè)問題提供了各種優(yōu)秀的解決方案,使開發(fā)者可以快速、簡單、高效地搭建開發(fā)環(huán)境,用起來確實很方便,但是卻產(chǎn)生了強烈的依賴性,現(xiàn)在有多少人脫離了框架還能開發(fā)出想要的功能?當(dāng)然,框架我們還是要用的,但是隨著學(xué)習(xí)的不斷加深,在出現(xiàn)故障時我們及時定位問題,在當(dāng)前業(yè)務(wù)需求不滿足時,我們需要快速找到解決方法。

功能介紹

以下是官網(wǎng)的一段話,直接介紹了Shiro能為我們做什么

Apache Shiro是一個功能強大且易于使用的Java安全框架,可執(zhí)行身份驗證、授權(quán)、加密和會話管理。

圖片

特色

主要功能:

  • Authentication:身份認(rèn)證,證明用戶是否具有訪問系統(tǒng)的身份。
  • Authorization:訪問控制,即確定“誰”可以訪問系統(tǒng)的“什么”資源。
  • Session Management:會話管理,支持Web 或 EJB 應(yīng)用程序的會話管理。
  • Cryptography:使用密碼算法保持?jǐn)?shù)據(jù)安全,主要是密碼。
    其他功能:
    • Web Support::Shiro 的 Web 支持 API 有助于輕松保護 Web 應(yīng)用程序。
    • Caching:緩存,確保 Apache Shiro API能夠快速和高效地操作。
    • Concurrency:Apache Shiro 支持多線程應(yīng)用程序的并發(fā)特性。
    • Testing:存在測試支持以幫助您編寫單元和集成測試,并確保您的代碼按預(yù)期執(zhí)行。
    • Run As:允許用戶假設(shè)為另一個用戶的身份的獲取其功能權(quán)限,在管理場景中很有用。
    • Remember Me:跨會話記住用戶的身份,在登錄時指明,省去下次登錄的過程。

實現(xiàn)架構(gòu)

圖片

架構(gòu)

  • Subject( org.apache.shiro.subject.Subject) 當(dāng)前與軟件交互的實體(用戶、第三方服務(wù)、cron任務(wù)等)的特定的安全性的“視圖”。
  • SecurityManager ( org.apache.shiro.mgt.SecurityManager ) SecurityManager是Shiro架構(gòu)的核心。它主要是一個綜合的大對象,用于協(xié)調(diào)其托管組件以確保它們順利協(xié)同工作。它還管理Shiro對每個應(yīng)用程序用戶的視圖,因此它知道如何為每個用戶執(zhí)行安全操作。
  • Authenticator ( org.apache.shiro.authc.Authenticator ) 該Authenticator組件負(fù)責(zé)執(zhí)行和響應(yīng)用戶的身份驗證過程。當(dāng)用戶嘗試登錄時,該邏輯由Authenticator實現(xiàn)并執(zhí)行。Authenticator通過用戶配置的多個Realms,按照一定的策略,驗證提供的用戶是否滿足用戶身份。
    • AuthenticationStrategy ( org.apache.shiro.authc.pam.AuthenticationStrategy ) 當(dāng)配置了多個Realm時,AuthenticationStrategy將協(xié)調(diào)調(diào)用Realm來確定用戶身份驗證最終成功或失?。ū热缬幸粋€驗證成功或每個都要驗證成功)。
  • Authorizer ( org.apache.shiro.authz.Authorizer ) 是一個應(yīng)用訪問控制的組件。它是決定用戶是否被允許執(zhí)行某項操作。與Authenticator一樣,Authorizer能夠協(xié)調(diào)執(zhí)行多個Realm來獲取用戶的訪問角色和權(quán)限信息。
  • SessionManager ( org.apache.shiro.session.mgt.SessionManager ) 負(fù)責(zé)創(chuàng)建和管理用戶Session的生命周期。即使沒有可用的Web容器,Shiro能夠在任何環(huán)境中本地管理用戶會話。默認(rèn)情況下是基于Web容器實現(xiàn)會話機制,非Web環(huán)境則可以通過內(nèi)置的會話管理來提供相同的功能。可以通過SessionDAO實現(xiàn)會話的持久化。
    • SessionDAO ( org.apache.shiro.session.mgt.eis.SessionDAO ) 實現(xiàn)Session的持久化。
  • CacheManager ( org.apache.shiro.cache.CacheManager ) 因為Shiro經(jīng)常訪問后端數(shù)據(jù)源進行身份驗證、授權(quán)和會話管理,通過緩存可以提高性能。
  • Cryptography( org.apache.shiro.crypto.* ) 密碼學(xué)是企業(yè)安全框架的擴展。Shiro的crypto包含易于使用和理解的密碼、哈希(又名摘要)和不同編解碼器實現(xiàn)的實現(xiàn)。Shiro的加密API簡化了復(fù)雜的Java機制,使密碼加密更容易。
  • Realm ( org.apache.shiro.realm.Realm ) Realm是Shiro和應(yīng)用程序安全數(shù)據(jù)之間的“橋梁”。當(dāng)用戶需要對身份進行認(rèn)證或授權(quán)時,Shiro會通過程序中配置的一個或多個Realm來查找滿足的數(shù)據(jù)。Shiro將根據(jù)需要與它們協(xié)調(diào)以進行身份驗證和授權(quán)。

相關(guān)術(shù)語

如果理解了官網(wǎng)里介紹的這些術(shù)語,那么在進行shiro配置時,需要配置哪些信息,,分別有什么作用,怎么配置應(yīng)該也會有一個較好的認(rèn)識。

Authentication是驗證主體身份的過程——本質(zhì)上是證明某人確實是他們所說的那個人。當(dāng)身份驗證嘗試成功時,應(yīng)用程序可以相信該主體是應(yīng)用程序所期望的。

Authorization授權(quán),也稱為訪問控制,是確定是否允許用戶/主體做某事的過程。它通常通過檢查和解釋主題的角色和權(quán)限(見下文)然后允許或拒絕訪問請求的資源或功能來完成。

Cipher密碼是一種用于執(zhí)行加密或解密的算法。該算法通常依賴于稱為密鑰的一條信息。并且加密會根據(jù)密鑰而有所不同,因此如果沒有它,解密將非常困難。

密碼有不同的變體。塊密碼適用于通常具有固定大小的符號塊,而流密碼適用于連續(xù)的符號流。對稱密碼使用相同的密鑰進行加密和解密,而非對稱密碼使用不同的密鑰。如果非對稱密碼中的密鑰不能從另一個密鑰導(dǎo)出,則可以公開共享一個密鑰,創(chuàng)建公鑰/私鑰對


Credential憑據(jù)是驗證用戶/主體身份的一條信息 。在驗證嘗試驗證提交它們的用戶/主體實際上是關(guān)聯(lián)用戶期間,一個(或多個)憑證與主體一起提交。憑證通常是只有特定用戶/主體才能知道的非常機密的東西,例如密碼或 PGP 密鑰或生物特征或類似機制。

這個想法是,對于委托人,只有一個人會知道與該委托人“配對”的正確憑證。如果當(dāng)前用戶/主題提供了與存儲在系統(tǒng)中的證書匹配的正確證書,那么系統(tǒng)可以假定并相信當(dāng)前用戶/主題確實是他們所說的那個人。信任程度隨著更安全的憑證類型(例如生物特征簽名 > 密碼)而增加。


Cryptography密碼學(xué)是一種通過隱藏信息或?qū)⑵滢D(zhuǎn)換為無意義的信息來保護信息免遭不受歡迎的訪問的做法,這樣其他人就無法閱讀它。Shiro 專注于密碼學(xué)的兩個核心元素:使用公鑰或私鑰對電子郵件等數(shù)據(jù)進行加密的密碼,以及對密碼等數(shù)據(jù)進行不可逆加密的哈希(又名消息摘要)。

Hash散列函數(shù)是將輸入源(有時稱為消息)單向、不可逆地轉(zhuǎn)換為編碼散列值(有時稱為消息摘要)。它通常用于密碼、數(shù)字指紋或具有底層字節(jié)數(shù)組的數(shù)據(jù)。

Permission至少在 Shiro 的解釋中,權(quán)限是描述應(yīng)用程序中原始功能的語句,僅此而已。權(quán)限是安全策略中最低級別的結(jié)構(gòu)。他們只定義應(yīng)用程序可以做什么。他們沒有描述“誰”能夠執(zhí)行這些操作。許可只是行為聲明,僅此而已。

Principal主體是應(yīng)用程序用戶(主題)的任何標(biāo)識屬性 “識別屬性”可以是任何對您的應(yīng)用程序有意義的東西——用戶名、姓氏、名字、社會安全號碼、用戶 ID 等等。就是這樣——沒什么瘋狂的。

Realm領(lǐng)域是可以訪問特定于應(yīng)用程序的安全數(shù)據(jù)(例如用戶、角色和權(quán)限)的組件。它可以被認(rèn)為是一個安全特定的 DAO(數(shù)據(jù)訪問對象)。Realm 將這種特定于應(yīng)用程序的數(shù)據(jù)轉(zhuǎn)換為 Shiro 可以理解的格式,因此無論存在多少數(shù)據(jù)源或您的數(shù)據(jù)可能是多么特定于應(yīng)用程序,Shiro 都可以反過來提供一個易于理解的主題編程 API。

領(lǐng)域通常與數(shù)據(jù)源(例如關(guān)系數(shù)據(jù)庫、LDAP 目錄、文件系統(tǒng)或其他類似資源)具有一對一的關(guān)聯(lián)。因此,Realm 接口的實現(xiàn)使用特定于數(shù)據(jù)源的 API 來發(fā)現(xiàn)授權(quán)數(shù)據(jù)(角色、權(quán)限等),例如 JDBC、文件 IO、Hibernate 或 JPA,或任何其他數(shù)據(jù)訪問 API。


Role角色的定義與交互的系統(tǒng)關(guān)聯(lián)。在許多應(yīng)用程序中,人們使用它來隱式定義安全策略充其量只是一個模糊的概念。Shiro 更喜歡將角色簡單地解釋為權(quán)限的命名集合。就是這樣 - 聚合一個或多個權(quán)限聲明的應(yīng)用程序唯一名稱.

這是一個比許多應(yīng)用程序使用的隱含定義更具體的定義。如果您選擇讓您的數(shù)據(jù)模型反映 Shiro 的假設(shè),您會發(fā)現(xiàn)您將擁有更多控制安全策略的權(quán)力。

Session會話是與在一段時間內(nèi)與軟件系統(tǒng)交互的單個用戶/主體相關(guān)聯(lián)的有狀態(tài)數(shù)據(jù)上下文。當(dāng)主體使用應(yīng)用程序時,可以從會話中添加/讀取/刪除數(shù)據(jù),并且應(yīng)用程序可以稍后在必要時使用這些數(shù)據(jù)。當(dāng)用戶/主體退出應(yīng)用程序或由于不活動而超時時,會話將終止。

對于熟悉 HttpSession 的人來說,ShiroSession具有相同的用途,除了 Shiro 會話可以在任何環(huán)境中使用,即使沒有可用的 Servlet 容器或 EJB 容器。


Subject主題只是花哨的安全術(shù)語,基本上意味著應(yīng)用程序用戶的特定于安全的“視圖” 。一個主題并不總是需要反映一個人 - 它可以代表一個調(diào)用您的應(yīng)用程序的外部進程,或者可能是一個在一段時間內(nèi)間歇性執(zhí)行某些事情的守護程序系統(tǒng)帳戶(例如 cron 作業(yè))。它基本上是對應(yīng)用程序做某事的任何實體的表示。

關(guān)鍵模塊

EnvironmentLoaderListener

該類實現(xiàn)了ServletContextListener,因此我們在web.xml中配置后即可啟用,主要目的是為了構(gòu)建Enviroment對象并保存到ServleteContext中。

public class EnvironmentLoaderListener extends EnvironmentLoader implements ServletContextListener {

    public void contextInitialized(ServletContextEvent sce) {
        initEnvironment(sce.getServletContext());
    }

    public void contextDestroyed(ServletContextEvent sce) {
        destroyEnvironment(sce.getServletContext());
    }
}

Environment

Environment是一個Shiro容器,主要目的是提供SecurityManager對象。

public interface Environment {

    SecurityManager getSecurityManager();
}

SecurityManager

SecurityManager是Shiro框架中最核心的類,用戶的認(rèn)證、鑒權(quán)都是基于它來完成的,包含認(rèn)證、會話管理、RememberMe等功能,這也是開發(fā)者需要理解并配置較多的類。

public interface SecurityManager extends Authenticator, Authorizer, SessionManager {

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

    void logout(Subject subject);

    Subject createSubject(SubjectContext context);

}

Authenticator

實現(xiàn)了用戶的身份認(rèn)證邏輯,也就是密碼校驗,注意我們是通過對AuthenticationToken進行認(rèn)證,在該Token中封裝了用戶提交的信息,

開發(fā)者只需要根據(jù)這些信息構(gòu)建AuthenticationInfo對象,密碼的校驗過程是有Shiro代理完成的。

public interface Authenticator {

    public AuthenticationInfo authenticate(AuthenticationToken authenticationToken)
            throws AuthenticationException;
}

Authorizer

實現(xiàn)了用戶權(quán)限的鑒權(quán),包括權(quán)限和角色,鑒權(quán)過程在整個系統(tǒng)的生命周期中是比較頻繁的,我們應(yīng)該配置CacheManager來提高系統(tǒng)效率,避免頻繁的進行DAO操作。

public interface Authorizer {

    boolean isPermitted(PrincipalCollection principals, String permission);

    boolean isPermittedAll(PrincipalCollection subjectPrincipal, String... permissions);

    void checkPermission(PrincipalCollection subjectPrincipal, String permission) throws AuthorizationException;

    boolean hasRole(PrincipalCollection subjectPrincipal, String roleIdentifier);

    boolean hasAllRoles(PrincipalCollection subjectPrincipal, Collection< String > roleIdentifiers);

    void checkRole(PrincipalCollection subjectPrincipal, String roleIdentifier) throws AuthorizationException;
 
 // ...
    
}

SessionManager

會話管理主要是為了實現(xiàn)認(rèn)證保持,即一次認(rèn)證成功后基于Cookie/Session機制,使下次會話不需要重復(fù)認(rèn)證。在集群環(huán)境中,如果通過容器來管理會話那樣就沒辦法實現(xiàn)會話共享,我們可以通過一些分布式會話管理框架來實現(xiàn)。

public interface SessionManager {

    Session start(SessionContext context);

    Session getSession(SessionKey key) throws SessionException;
}

SubjectDAO實現(xiàn)Subject對象的保存,比如將Subject保存的Session或者到數(shù)據(jù)庫。一般情況下,我們通過 SecurityUtils.getSubject()獲取Subject對象,這里沒有提供get方法。

public interface SubjectDAO {

    Subject save(Subject subject);

    void delete(Subject subject);
}

RememberMeManager

記住我,實現(xiàn)用戶在會話超時后,不需要重新登錄即可進入系統(tǒng),默認(rèn)是基于Cookie實現(xiàn),主要將用戶信息寫入到Cookie中,并設(shè)置一個有效期,比如14天。

public interface RememberMeManager {

    PrincipalCollection getRememberedPrincipals(SubjectContext subjectContext);

    void forgetIdentity(SubjectContext subjectContext);

    void onSuccessfulLogin(Subject subject, AuthenticationToken token, AuthenticationInfo info);

    void onFailedLogin(Subject subject, AuthenticationToken token, AuthenticationException ae);

    void onLogout(Subject subject);
}

CacheManager

緩存,上面說到在鑒權(quán)時通過緩存提高API效率,還可以緩存Session實現(xiàn)Session快速存取。

public interface CacheManager {
    < K, V > Cache< K, V > getCache(String var1) throws CacheException;
}

Realm

Realm是開發(fā)者經(jīng)常需要重寫的,也是Shiro的擴展點,我們可以根據(jù)需要配置多個Realm,這樣可以實現(xiàn)多因子認(rèn)證,比如用戶名、郵箱、指紋等。一般可以通過繼承AuthenticatingRealm重寫抽象方法實現(xiàn)。

public interface Realm {

    String getName();

    boolean supports(AuthenticationToken token);

    AuthenticationInfo getAuthenticationInfo(AuthenticationToken token) throws AuthenticationException;

}

Subject

Subject也是Shiro中非常重要的對象,在系統(tǒng)中,我們的操作基本都是調(diào)用其內(nèi)部方法,最終由SecurityManager代理完成。比如常見的登錄、登出、是否有角色、是否有權(quán)限等。

public interface Subject {

 Object getPrincipal();
 
 PrincipalCollection getPrincipals();
 
 void login(AuthenticationToken token) throws AuthenticationException;

   // ...
}

AuthenticationToken

用戶提交的請求數(shù)據(jù)我們一般會進行封裝,因為除了用戶名密碼,可能還會有一些其他信息,比如動態(tài)碼、RememberMe標(biāo)識,或者基于令牌的認(rèn)證。

public interface AuthenticationToken extends Serializable {

    Object getPrincipal();

    Object getCredentials();

}

SubjectContext

Subject上下文,保存了Subject相關(guān)的數(shù)據(jù),比如Subject、SecurityManager、Session等,在Subject間相互隔離。

public interface SubjectContext extends Map< String, Object > {

    Subject getSubject();

    PrincipalCollection getPrincipals();

    PrincipalCollection resolvePrincipals();

    Session getSession();

    Session resolveSession();

    boolean isAuthenticated();

    boolean isSessionCreationEnabled();

    boolean resolveAuthenticated();

    AuthenticationInfo getAuthenticationInfo();

    AuthenticationToken getAuthenticationToken();

}

ShiroFilter

Shiro過濾器鏈,前面一直提到基于Web的認(rèn)證基本都是通過Filter實現(xiàn),在一個Web項目中會有很多個Filter,而且會按照配置順序執(zhí)行,隱藏Shiro的過濾器會定義成鏈的模式,同時也是為了方便配置。開發(fā)者會根據(jù)業(yè)務(wù)需求配置過濾規(guī)則,最終都會由FilterChainResolver解析成過濾器鏈。

public class ShiroFilter extends AbstractShiroFilter {

    @Override
    public void init() throws Exception {
        WebEnvironment env = WebUtils.getRequiredWebEnvironment(getServletContext());

        setSecurityManager(env.getWebSecurityManager());

        FilterChainResolver resolver = env.getFilterChainResolver();
        if (resolver != null) {
            setFilterChainResolver(resolver);
        }
    }
}

Filter

在DefaultFilter中,我們可以看到這樣的定義,主要是為過濾器提供了別名方便開發(fā)者進行配置。

anon(AnonymousFilter.class),
    authc(FormAuthenticationFilter.class),
    authcBasic(BasicHttpAuthenticationFilter.class),
    authcBearer(BearerHttpAuthenticationFilter.class),
    logout(LogoutFilter.class),
    noSessionCreation(NoSessionCreationFilter.class),
    perms(PermissionsAuthorizationFilter.class),
    port(PortFilter.class),
    rest(HttpMethodPermissionFilter.class),
    roles(RolesAuthorizationFilter.class),
    ssl(SslFilter.class),
    user(UserFilter.class),
    invalidRequest(InvalidRequestFilter.class);

一般配置如下:

/login.html = anon; //表示不需認(rèn)證也可訪問

/login.html = authc; //表示表單POST提交到/login.html請求時會根據(jù)提交的參數(shù)進行身份認(rèn)證

/system = authcBasic; //根據(jù)請求頭Authorization:BASIC Base64(用戶名:密碼)的形式完成認(rèn)證

/system = authcBearer; //根據(jù)請求頭Authorization:Bearer Token的形式完成認(rèn)證

/logout = logout; //退出登錄

/authz = perms[update, :add, :delete: ]; //表示具有操作權(quán)限可訪問,支持' '通配符

/index.html = port[8080]; //表示8080請求端口才能訪問

//權(quán)限字符串由 type:action:instance 組成,在rest服務(wù)中,通過權(quán)限與請求方法構(gòu)建權(quán)限字符串[perm:mapping],

請求方法與action對應(yīng)關(guān)系如下:

// GET|HEAD|OPTIONS|TRACE -> read

// PUT -> update

// POST|MKCOL -> create

/ = rest

認(rèn)證流程

圖片

認(rèn)證流程

第1步:應(yīng)用程序代碼調(diào)用該Subject.login方法,傳入代表最終用戶的主體和憑據(jù)的構(gòu)造AuthenticationToken實例。

第2步:Subject實例,通常是一個類通過調(diào)用DelegatingSubject委托給應(yīng)用程序,實際的身份驗證工作從這里開始。SecurityManagersecurityManager.login(token)

第3步:SecurityManager作為基本的綜合組件,接收令牌并通過調(diào)用簡單地委托給其內(nèi)部Authenticator實例authenticator.authenticate(token)。一般是ModularRealmAuthenticator實例,它支持在身份驗證期間協(xié)調(diào)一個或多個Realm實例。ModularRealmAuthenticator本質(zhì)上為 Apache Shiro提供了PAM樣式的范例(其中每個Realm 都是 PAM 術(shù)語中的“模塊”)。

第4步:如果Realm為應(yīng)用程序配置了多個,ModularRealmAuthenticator實例將Realm使用其配置的 啟動多重身份驗證嘗試策略AuthenticationStrategy。Realms在調(diào)用 進行身份驗證之前、期間和之后,AuthenticationStrategy將根據(jù)每個Realm的執(zhí)行結(jié)果做出最終認(rèn)證的決定。

第5步:根據(jù)每一個配置Realm,判斷supports是否提交AuthenticationToken。如果匹配則以token為參數(shù)調(diào)用Realm的getAuthenticationInfo方法。該方法代表了Realm的一次身份驗證嘗試。

結(jié)束語

關(guān)于shiro,很多都是介紹框架關(guān)鍵組件,比如SecurityManager,大部分功能都是圍繞該類展開,后面會通過實戰(zhàn),一步一步了解以上提到的各個模塊在項目運行期間如何實現(xiàn)最終的用戶身份認(rèn)證以及對應(yīng)的訪問權(quán)限控制,以及細(xì)化到其具體的實現(xiàn)流程與模塊間的時序調(diào)用關(guān)系。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104096
  • 框架
    +關(guān)注

    關(guān)注

    0

    文章

    396

    瀏覽量

    17269
  • 加密
    +關(guān)注

    關(guān)注

    0

    文章

    299

    瀏覽量

    23787
  • 應(yīng)用程序
    +關(guān)注

    關(guān)注

    37

    文章

    3198

    瀏覽量

    57360
收藏 人收藏

    評論

    相關(guān)推薦

    ALTIUM功能介紹

    ALTIUM功能介紹
    發(fā)表于 06-26 08:43

    什么是MQTT?MQTT功能介紹

    RT-ThreadMQTT客戶端功能特點MQTT簡述MQTT功能介紹MQTT客戶端MQTT協(xié)議中的方法
    發(fā)表于 03-30 07:06

    TIM3功能介紹

    一般定時器(TIM3)(參考文獻:STM32F030x4/6/8/C參考手冊)TIM3介紹TIM3主功能功能介紹定時器基本單元功能圖計數(shù)器模
    發(fā)表于 08-04 07:37

    MCU環(huán)境與功能介紹

    寄存器編程,代碼簡潔、執(zhí)行效率高、注釋到位、移植方便。項目完整源代碼下載地址(下載即可編譯運行測試)二、功能介紹這是基于STM32F10...
    發(fā)表于 08-12 07:31

    介紹高級時鐘的PWM功能的應(yīng)用

    文章目錄前言前言從本文開始,介紹F429的高級時鐘特性。本文主要介紹高級時鐘的PWM功能的應(yīng)用。關(guān)于PWM,本文重點介紹實現(xiàn)帶有斷路功能的雙
    發(fā)表于 08-19 08:29

    Core的Ble藍(lán)牙功能介紹

    文章目錄前言一、Core的Ble藍(lán)牙功能介紹二、完整代碼前言ShineBlink Core開發(fā)板(簡稱Core)采用的Soc芯片是Nordic半導(dǎo)體公司的Nrf52840芯片,內(nèi)置2.4G無線功能
    發(fā)表于 02-17 06:21

    DVP功能及應(yīng)用介紹

    數(shù)字?jǐn)z像頭并行接口(DVP)用于捕獲 CMOS 影像攝像機所輸出的并行數(shù)據(jù)。本文主要就 DVP 功能簡介以及應(yīng)用介紹。
    發(fā)表于 10-25 06:15

    GPS功能介紹

    GPS功能介紹 功能介紹
    發(fā)表于 01-29 10:35 ?4925次閱讀

    shiro簡單教程,環(huán)境搭建,權(quán)限控制,登陸驗證

    shiro簡單教程,環(huán)境搭建,權(quán)限控制,登陸驗證
    發(fā)表于 09-09 08:18 ?9次下載
    <b class='flag-5'>shiro</b>簡單教程,環(huán)境搭建,權(quán)限控制,登陸驗證

    Apache Shiro框架的詳細(xì)資料說明

    對新的用戶機制并不熟悉,導(dǎo)致出現(xiàn)問題時耗費了大量的時間來進行修復(fù)。因此,我認(rèn)為我有必要編寫此文來介紹一下新的 Shiro 用戶機制。
    發(fā)表于 03-08 08:00 ?4次下載
    Apache <b class='flag-5'>Shiro</b>框架的詳細(xì)資料說明

    shiro綜合利用工具介紹

    shiro綜合利用工具:ShiroExp ? 工具介紹 shiro一把梭工具,該輪子主要有三大功能如下: 1、默認(rèn)密鑰爆破 利用SimplePrincipalCollection進行檢
    的頭像 發(fā)表于 10-24 11:14 ?5104次閱讀

    再見了shiro

    在分布式項目里,比如電商項目,其實不太需要明確的權(quán)限劃分,說白了,我認(rèn)為沒必要做太麻煩的權(quán)限管理,一切從簡。何況shiro對于springCloud等各種分布式框架來說,簡直就是“災(zāi)難”。
    的頭像 發(fā)表于 01-15 11:32 ?641次閱讀

    Weblogic上的shiro漏洞利用工具介紹

    日常項目中,可能會碰見部署在weblogic上的shiro,所以先寫了這個生成攻擊payload的小Demo,方便后面使用。但目前只支持無回顯命令執(zhí)行,后續(xù)回顯、內(nèi)存馬功能后面出差后再寫。
    的頭像 發(fā)表于 07-27 09:10 ?1103次閱讀
    Weblogic上的<b class='flag-5'>shiro</b>漏洞利用工具<b class='flag-5'>介紹</b>

    shiro如何實現(xiàn)Web應(yīng)用認(rèn)證

    前面簡單介紹shiro這個框架的一些基本知識,包括其架構(gòu)模型,主要的功能,關(guān)鍵名稱的含義,以及核心模塊和對應(yīng)的接口定義。 開始的話 今天我們從一個簡單示例,先了解使用shiro實現(xiàn)W
    的頭像 發(fā)表于 10-08 14:53 ?424次閱讀
    <b class='flag-5'>shiro</b>如何實現(xiàn)Web應(yīng)用認(rèn)證

    一個簡單的Shiro RCE檢測和利用腳本

    一個簡單的Shiro RCE檢測和利用腳本。
    的頭像 發(fā)表于 01-09 09:46 ?484次閱讀