《從零打造項(xiàng)目》系列文章
Java應(yīng)用安全框架工具
- 比MyBatis Generator更強(qiáng)大的代碼生成器
ORM框架選型
- SpringBoot項(xiàng)目基礎(chǔ)設(shè)施搭建
- SpringBoot集成Mybatis項(xiàng)目實(shí)操
- SpringBoot集成MybatisPlus項(xiàng)目實(shí)操
- SpringBoot集成Spring Data JPA項(xiàng)目實(shí)操
數(shù)據(jù)庫(kù)變更管理
數(shù)據(jù)庫(kù)變更管理:Liquibase or Flyway
SpringBoot結(jié)合Liquibase實(shí)現(xiàn)數(shù)據(jù)庫(kù)變更管理
定時(shí)任務(wù)框架
- Java定時(shí)任務(wù)技術(shù)分析
- SpringBoot結(jié)合Quartz實(shí)現(xiàn)定時(shí)任務(wù)
- SpringBoot結(jié)合XXL-JOB實(shí)現(xiàn)定時(shí)任務(wù)
緩存
- 待更新
安全框架
- Java應(yīng)用程序安全框架
開(kāi)發(fā)規(guī)范
- 待更新
在構(gòu)建應(yīng)用程序時(shí),必須首先考慮其安全性。每個(gè)應(yīng)用程序都是通過(guò)網(wǎng)絡(luò)發(fā)布的,隨之而來(lái)的是安全、隱私和完整性風(fēng)險(xiǎn)的威脅。
根據(jù)開(kāi)放 Web 應(yīng)用程序安全項(xiàng)目 (OWASP),最重要的安全風(fēng)險(xiǎn)是:
大致定義如下:
訪問(wèn)OWASP Top Ten以了解有關(guān)這些漏洞的更多信息。
Java 框架提供代碼重用能力,同時(shí)消除了構(gòu)建樣板代碼任務(wù)的需要。讓我們來(lái)看看一些優(yōu)秀的基于 Java 的框架,以提高應(yīng)用程序的安全性并加速您的業(yè)務(wù)增長(zhǎng)。
JAAS 用作保護(hù) Java 應(yīng)用程序的 API。它包括許多為身份驗(yàn)證和授權(quán)而設(shè)計(jì)的 Java 包。JAAS 是 Java SE 1.3 中的一個(gè)可選包,之后,它從 1.4 版開(kāi)始成為 JDK 的一部分。
JAAS 可用于兩個(gè)目的:
JAAS 中的身份驗(yàn)證以可插入的方式執(zhí)行。它允許應(yīng)用程序擺脫基本的身份驗(yàn)證技術(shù)。
查看 API 和示例的參考指南。
Spring SecuritySpring Security 是一個(gè)可以根據(jù)企業(yè)應(yīng)用需求進(jìn)行修改的框架。它克服了身份驗(yàn)證和訪問(wèn)控制的困難。
身份驗(yàn)證是設(shè)置主要是他們聲明的人(可能是用戶、設(shè)備或一些可以為您的應(yīng)用程序執(zhí)行操作的不同機(jī)器)的過(guò)程。授權(quán)是確定專業(yè)是否可以在您的應(yīng)用程序內(nèi)執(zhí)行操作的系統(tǒng)。
詳細(xì)學(xué)習(xí)參考官方文檔。
Apache ShiroApache Shiro 被認(rèn)為是一個(gè)非常有效的 Java 安全框架,它在所有類型的 Java 應(yīng)用程序上進(jìn)行加密、授權(quán)和會(huì)話管理,無(wú)論它們的大小如何。
Shiro 被設(shè)計(jì)成一個(gè)直觀且易于使用的框架,同時(shí)提供強(qiáng)大的安全功能。它是框架中立的,因此可以與任何 Java 支持的框架無(wú)縫協(xié)作。
有關(guān)詳細(xì)文檔,參閱官方網(wǎng)站。
HDIVHDIV 是一個(gè) Java Web 應(yīng)用程序安全框架。它通過(guò)添加安全功能并維護(hù) API 和框架規(guī)范來(lái)擴(kuò)展 Web 應(yīng)用程序的行為。
它廣泛用于基于 Struts、Spring MVC、Grails、JSTL 等構(gòu)建的應(yīng)用程序,因?yàn)樗鼮殚_(kāi)發(fā)人員提供了急需的透明度,而不會(huì)增加應(yīng)用程序開(kāi)發(fā)的任何復(fù)雜性。
查看官方文檔以獲取更多詳細(xì)信息。
OACCOACC 是用于 Java 的應(yīng)用程序安全框架,專為細(xì)粒度(對(duì)象級(jí))訪問(wèn)控制而設(shè)計(jì)。它專門為每個(gè)實(shí)施和控制實(shí)用程序的身份驗(yàn)證和授權(quán)需求提供功能齊全的 API - 它是有效且靈活的安全模型的完整實(shí)現(xiàn)。
OACC 利用抽象的援助來(lái)保護(hù)實(shí)用項(xiàng)目。這一關(guān)鍵抽象允許 OACC 提供豐富的 API,包括授予、撤銷和查詢功能,用于存儲(chǔ)和處理應(yīng)用程序的安全關(guān)系。
查看官方文檔以獲取更多詳細(xì)信息。
如何選擇安全框架上述有五種安全框架,實(shí)際應(yīng)用中該如何選擇呢?首先聲明,本人對(duì) Spring Security 和 Apache Shiro 有所了解,具體使用過(guò) Spring Security,其他三種首次聽(tīng)說(shuō)。
JAAS(Java 認(rèn)證和授權(quán)服務(wù))JAAS 雖然作為 JDK 的一部分,但我對(duì)它知之甚少,詳細(xì)介紹可以參考官方文檔,如何使用可以參考這篇文章。
為什么企業(yè)級(jí)應(yīng)用不使用 JAAS,我也沒(méi)找到專業(yè)解釋,自己琢磨了一番,發(fā)現(xiàn)了點(diǎn)門道。
先對(duì) JAAS API 中常用的一些類和接口做個(gè)簡(jiǎn)單的說(shuō)明。
LoginModule :確認(rèn)用戶的合法性(使用CallbackHandler或者其他類方法),并分配訪問(wèn)權(quán)限principal給subject;
LoginContext:為了實(shí)現(xiàn)用戶鑒別,建立相應(yīng)的環(huán)境,從配置文件中導(dǎo)入規(guī)則;
CallbackHandler:回調(diào)處理器,負(fù)責(zé)與用戶(代碼擁有者和執(zhí)行者)交互,確認(rèn)其身份的合法性;
Subject:表示登陸處理的目標(biāo),即一個(gè)被鑒別的用戶。并可關(guān)聯(lián)一個(gè)或多個(gè)pirncipal;
Principal:表示具有訪問(wèn)權(quán)限的一個(gè)實(shí)體,可以看作是可以執(zhí)行某種操作的證件。
這些類和接口的關(guān)系有個(gè)生動(dòng)的比喻:一個(gè)學(xué)校,入學(xué)的時(shí)候校方(LoginModule)根據(jù)學(xué)生(Subject)的入學(xué)通知來(lái)確定其合法 性,這個(gè)過(guò)程交由某工作人員(CallbackHandler)執(zhí)行,(CallbackHandler)確認(rèn)后,(LoginModule)給不同 (Subject)根據(jù)其身份發(fā)給相關(guān)的證件(Principal),有了該證件就可以訪問(wèn)對(duì)應(yīng)的資源,(Subject)根據(jù)自己的 (Principal)的級(jí)別可以使用和訪問(wèn)學(xué)校不同資源。
而上述這些 JAAS 的核心類,在 Spring Security 中有類似存在,Spring Security 提供了一個(gè)包來(lái)將身份驗(yàn)證請(qǐng)求委托給 Java 身份驗(yàn)證和授權(quán)服務(wù) (JAAS)。比如說(shuō)抽象類AbstractJaasAuthenticationProvider
和 接口JaasAuthenticationCallbackHandler
。
package org.springframework.security.authentication.jaas;
import java.io.IOException;
import javax.security.auth.callback.Callback;
import javax.security.auth.callback.UnsupportedCallbackException;
import org.springframework.security.core.Authentication;
public interface JaasAuthenticationCallbackHandler {void handle(Callback callback, Authentication auth) throws IOException, UnsupportedCallbackException;
}
對(duì)比 JAAS 中的 CallbackHandler
package javax.security.auth.callback;
public interface CallbackHandler {void handle(Callback[] callbacks)
throws java.io.IOException, UnsupportedCallbackException;
}
更多介紹推薦閱讀官方文檔。
由上可知,我們出于某些原因,沒(méi)有直接使用 JAAS,但是如果使用了 Spring Security,也算是間接地使用 JAAS。
Spring SecuritySpring Security 最早不叫 Spring Security ,叫 Acegi Security,叫 Acegi Security 并不是說(shuō)它和 Spring 就沒(méi)有關(guān)系了,它依然是為 Spring 框架提供安全支持的。事實(shí)上,Java 領(lǐng)域的框架,很少有框架能夠脫離 Spring 框架獨(dú)立存在。
Acegi Security 基于 Spring,可以幫助我們?yōu)轫?xiàng)目建立豐富的角色與權(quán)限管理,但是最廣為人詬病的則是它臃腫繁瑣的配置,這一問(wèn)題最終也遺傳給了 Spring Security。
但是和 Shiro 相比,人們對(duì) Spring Security 的評(píng)價(jià)依然中重量級(jí)、配置繁瑣,對(duì)于初學(xué)者來(lái)說(shuō)比較難。直到 Spring Boot 橫空出世,這些問(wèn)題統(tǒng)統(tǒng)都得到緩解。在 Spring Boot 或者 Spring Cloud 中,如果想選擇一個(gè)權(quán)限管理框架,幾乎毫無(wú)疑問(wèn)的選擇 Spring Security,Shiro 在這個(gè)環(huán)境下已經(jīng)不具備優(yōu)勢(shì)了。
綜上,如果你所接觸的項(xiàng)目多是 SpringBoot 或者 SpringCloud,那么推薦學(xué)習(xí)使用 Spring Security。
Apache Shiro無(wú)論是 Shiro 還是 Spring Security,最最核心的功能,無(wú)非就是兩方面:
其功能特點(diǎn)如下圖所示:
Shiro 比 Spring 更容易使用,功能強(qiáng)大、且 簡(jiǎn)單、靈活。是 Apache 下的項(xiàng)目比較可靠,且不跟任何的框架或者容器綁定,可以獨(dú)立運(yùn)行。如果是 Spring 項(xiàng)目,不建議使用 Shiro。
HDIVHDIV 之前根本沒(méi)有聽(tīng)說(shuō)過(guò),官網(wǎng)介紹寫的比較厲害:Hdiv 抵御了 OWASP 前 10 名中包含的 90% 的應(yīng)用程序安全風(fēng)險(xiǎn)——對(duì)最關(guān)鍵的 Web 應(yīng)用程序安全漏洞的廣泛共識(shí)——例如 SQL 注入、跨站點(diǎn)腳本、跨站點(diǎn)請(qǐng)求偽造、數(shù)據(jù)篡改和暴力攻擊. Hdiv 提供了比當(dāng)前任何可用的解決 Web 應(yīng)用程序安全風(fēng)險(xiǎn)的解決方案更高的有效性。
同時(shí)還為一些知名企業(yè)提供安全服務(wù),如下圖所示:
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-aAUJOfmg-1669618897120)(https://camo.githubusercontent.com/5e1d5e9c11c99f3dc8f505d3a875280378d1da48a8ed77042a23cfca2b035f0e/68747470733a2f2f6864697673656375726974792e636f6d2f696d672f737570706f727465642d746563686e6f6c6f676965732e706e67)]
而且在 Github 介紹中提到已與 SpringMVC 集成,相較于 Spring Security 功能不夠完整,且學(xué)習(xí)成本較大,以及適用范圍不夠廣,所以不推薦使用。
OACCOACC (讀音 Oak)是 Object Access Control serviCe 的縮寫。它是一個(gè)高級(jí)的 Java? 應(yīng)用安全框架. OACC 提供高性能 API ,為 Java應(yīng)用程序提供了基于權(quán)限的授權(quán)服務(wù)。簡(jiǎn)而言之,OACC 可以讓你的應(yīng)用通過(guò)發(fā)出問(wèn)題來(lái)保證安全:“實(shí)體 ‘A’ 是否被允許在實(shí)體 ‘B’ 上進(jìn)行操作 ‘p’。
在官網(wǎng)可以看到,OACC 很早就不再更新了。
此外,如果你想使用 OACC,還需要在對(duì)應(yīng)的數(shù)據(jù)庫(kù)中執(zhí)行必要的腳本,比如說(shuō) MySQL 數(shù)據(jù)庫(kù)。
這意味著你需要按照 OACC 的要求來(lái)設(shè)計(jì)表結(jié)構(gòu),這是不能容忍的。理所當(dāng)然,我們不考慮該框架。
小結(jié)綜上,Spring Security 和 Shiro 是目前最受歡迎的兩款安全框架,但因?yàn)?SpringBoot 和 SpringCloud 的火熱,讓同為 Spring 家族的 Spring Security 也變得火熱起來(lái),所以推薦學(xué)習(xí)使用 Spring Security。
參考文獻(xiàn)Java 安全框架
構(gòu)建安全應(yīng)用程序的前 5 個(gè) Java 應(yīng)用程序安全框架
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
分享題目:Java應(yīng)用程序安全框架-創(chuàng)新互聯(lián)
分享網(wǎng)址:http://chinadenli.net/article34/dipspe.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供面包屑導(dǎo)航、微信公眾號(hào)、標(biāo)簽優(yōu)化、Google、網(wǎng)頁(yè)設(shè)計(jì)公司、企業(yè)建站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容
移動(dòng)網(wǎng)站建設(shè)知識(shí)