在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    安全管理框架,用Shiro還是用Spring Security?

    安全管理框架,用Shiro還是用Spring Security?

    開發(fā)Java應(yīng)用項目的時候,安全管理通常來講是必不可少的功能。常用的安全管理框架有Apache Shiro和Spring Security,那么作為一名開發(fā)人員的話,該如何選擇自己的權(quán)限管理框架呢?

    首先我們來看一看兩者的區(qū)別。

    Apache Shiro是一個強大且易用的Java安全框架,能夠非常清晰的處理認(rèn)證、授權(quán)、管理會話以及密碼加密等功能。他的API也非常易于理解的API,因此,對于初學(xué)者來說,非常容易上手。

    它的特點包括:

    · 易于理解的 Java Security API;

    · 簡單的身份認(rèn)證(登錄),支持多種數(shù)據(jù)源(LDAP,JDBC,Kerberos,ActiveDirectory等);

    · 對角色的簡單的簽權(quán)(訪問控制),支持細(xì)粒度的簽權(quán);

    · 支持一級緩存,以提升應(yīng)用程序的性能;

    · 內(nèi)置的基于 POJO 企業(yè)會話管理,適用于 Web 以及非 Web 的環(huán)境;

    · 異構(gòu)客戶端會話訪問;

    · 非常簡單地加密 API;

    · 不跟任何的框架或者容器捆綁,可以獨立運行。

    Spring Security是一個能夠為基于Spring的企業(yè)應(yīng)用系統(tǒng)提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應(yīng)用上下文中配置的Bean,充分利用了Spring IoC(控制反轉(zhuǎn)),DI( 依賴注入)和AOP(面向切面編程)功能,為應(yīng)用系統(tǒng)提供聲明式的安全訪問控制功能,減少了為企業(yè)系統(tǒng)安全控制編寫大量重復(fù)代碼的工作。它與Spring MVC能夠很好地集成,并配備了流行的安全算法實現(xiàn)捆綁在一起。Spring Security在我們進行用戶認(rèn)證以及授予權(quán)限的時候,通過各種各樣的攔截器來控制權(quán)限的訪問,從而實現(xiàn)安全。

    從功能上來講,shiro能實現(xiàn)的,Spring Security 基本都能實現(xiàn),依賴于Spring體系,但是好處是Spring全家桶的親兒子,集成上更加契合,在使用上,比shiro略負(fù)責(zé)。但是Shiro比Spring Security更容易使用,也就是實現(xiàn)上簡單一些,同時基本的授權(quán)認(rèn)證Shiro也基本夠用。

    從社區(qū)活躍度來說,Spring Security社區(qū)支持度更高,Spring社區(qū)的親兒子,支持力度和更新維護上有優(yōu)勢。相比之下Shiro的支持度就差了一點,但是依然還是有很多開發(fā)者在為Shiro做出貢獻。

    而Shiro 功能強大、簡單、靈活。不跟任何的框架或者容器綁定,可以獨立運行。因此對于非Spring的項目,Shiro兼容性更高一些。

    因此,從比較上來講,兩者的區(qū)別不是很大。使用的時候,如果開發(fā)框架全部采用Spring全家桶的話,那么用Spring Security會比較合適一些。而對于剛開始接觸安全管理框架或者是不用Spring全家桶的話,用Shiro比較好一些。

    但是,同時我們也應(yīng)該注意到,Shiro和Spring Security都已經(jīng)誕生了十幾年了,隨著技術(shù)的演進發(fā)展,其基本框架也產(chǎn)生了一定局限性,尤其是對于前后端分離的框架來說,需要多做很多兼容性的工作。

    在這種情況下,新的Java權(quán)限管理框架Sa-Token就應(yīng)運而生了。

    Sa-Token 是一個輕量級 Java 權(quán)限認(rèn)證框架,主要解決:登錄認(rèn)證、權(quán)限認(rèn)證、Session會話、單點登錄、OAuth2.0、微服務(wù)網(wǎng)關(guān)鑒權(quán) 等一系列權(quán)限相關(guān)問題。

    Sa-Token 的 API 設(shè)計非常簡單,以登錄認(rèn)證為例,只需要兩行代碼就可以完成了:

    // 在登錄時寫入當(dāng)前會話的賬號id

    StpUtil.login(10001);

    // 然后在需要校驗登錄處調(diào)用以下方法:

    // 如果當(dāng)前會話未登錄,這句代碼會拋出 `NotLoginException` 異常

    StpUtil.checkLogin();

    再比如權(quán)限認(rèn)證,如下代碼即可完成(只有具備 user:add 權(quán)限的會話才可以進入請求):

    @SaCheckPermission(“user:add”)

    @RequestMapping(“/user/insert”)

    public String insert(SysUser user) {

    // …

    return “用戶增加”;

    }

    看吧,是不是很簡單,相比起Shrio和Spring Security繁瑣來說,簡單是懶人的福音。事實上,對于絕大部分的權(quán)限控制功能Sa-Token都能夠用一句話來完成。就像下面一樣。

    StpUtil.login(10001); // 標(biāo)記當(dāng)前會話登錄的賬號id

    StpUtil.getLoginId(); // 獲取當(dāng)前會話登錄的賬號id

    StpUtil.isLogin(); // 獲取當(dāng)前會話是否已經(jīng)登錄, 返回true或false

    StpUtil.logout(); // 當(dāng)前會話注銷登錄

    StpUtil.kickout(10001); // 將賬號為10001的會話踢下線

    StpUtil.hasRole(“super-admin”); // 查詢當(dāng)前賬號是否含有指定角色標(biāo)識, 返回true或false

    StpUtil.hasPermission(“user:add”); // 查詢當(dāng)前賬號是否含有指定權(quán)限, 返回true或false

    StpUtil.getSession(); // 獲取當(dāng)前賬號id的Session

    StpUtil.getSessionByLoginId(10001); // 獲取賬號id為10001的Session

    StpUtil.getTokenValueByLoginId(10001); // 獲取賬號id為10001的token令牌值

    StpUtil.login(10001, “PC”); // 指定設(shè)備標(biāo)識登錄,常用于“同端互斥登錄”

    StpUtil.kickout(10001, “PC”); // 指定賬號指定設(shè)備標(biāo)識踢下線 (不同端不受影響)

    StpUtil.openSafe(120); // 在當(dāng)前會話開啟二級認(rèn)證,有效期為120秒

    StpUtil.checkSafe(); // 校驗當(dāng)前會話是否處于二級認(rèn)證有效期內(nèi),校驗失敗會拋出異常

    StpUtil.switchTo(10044); // 將當(dāng)前會話身份臨時切換為其它賬號

    因此,技術(shù)發(fā)展日新月異,作為一名程序員,要緊跟時代的發(fā)展,才能使自己不至于落后。

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月16日 18:00
    下一篇 2022年6月16日 18:01

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息