眾所周知,Java的生態(tài)環(huán)境相當龐大,包含了數(shù)量相當可觀的官方及第三方庫。利用這些庫,可以解決在用Java開發(fā)時遇到的各類問題,讓開發(fā)效率得到顯著提升。
舉些例子,最常用的官方庫有java.lang、java.util、java.io、java.sql、java.net等;而至于目前最流行的第三方庫,就有Junit、SLF4J、Google Guava、XStream、JSoup、Gson、Joda Time等,可以說是不勝枚舉。
我到底需要用到哪些Java庫呢?
某些庫再熱門也好,你的項目也未必適用。然而即便如此,大部分項目實際上都還是需要進行單元測試、日志記錄、序列化、代碼規(guī)范化等工作的,因此用一些相關(guān)的Java庫去解決問題,還是不錯的選擇。
下面,我來介紹一些可以用來解決常見開發(fā)問題的熱門Java庫吧。
1. JUnit
JUnit起源于 xUnit 家族的單元測試框架,目前可以說是最知名及常用的測試框架。通過 JUnit,可以輕松地寫出可重復(fù)測試的代碼。早期版本的JUnit屬于junit.framework 包;而從JUnit 4開始,便轉(zhuǎn)移到了org.junit 包。
JUnit的一大特色在于給開發(fā)者提供了簡潔的圖形界面,如此一來編寫測試代碼便更為輕松,開發(fā)的進度也得以顯著加快。
Junit允許多個測試一個接一個,或是并發(fā)同時執(zhí)行,并且會實時返回測試結(jié)果,而且還帶有進度條,提示開發(fā)者測試進度如何。一般當測試正常進行時,進度條是綠的;而當遇到了錯誤,就會變紅。
此外,JUnit還允許開發(fā)者創(chuàng)建測試套件 (Test Suite) 來查看、檢測整體的測試進度及測試期間發(fā)生的副作用。
對于很多項目而言,單元測試是非常重要的。JUnit之所以能夠成為Java圈中最熱門的測試庫,正是因為它既簡潔又高效。
2. SLF4J
SLF4J 或 Simple Logging Facade for Java,為不同的框架提供了一個抽象概念,允許開發(fā)人員在部署時插入任何框架。SLF4J 的功能在于基于外觀模式的簡單日志 API,并將客戶端 API 與日志后端分開。
通過向 classpath 中添加所需的綁定,可以發(fā)現(xiàn)其后端。由于客戶端 API 和后端完全解耦,因此它可以集成到任何框架或現(xiàn)有的代碼片段。
創(chuàng)建這個有用的機制的人是 Ceki Gülcü。 你可以在 SLF4J 下載鏈接傷下載 SLF4J。
3. Google Guava
Google Guava 是Java編程的另一個受歡迎的Java核心庫,它是開源的,由 Googl 開發(fā)的。Google Guava 項目中包含的庫可用于每天在谷歌上開發(fā)/升級的Java的產(chǎn)品。
Google Guava 軟件包中的庫或多或少是對核心庫的對應(yīng)部分有增強功能,并使編程更加高效和有效。Guava 包括內(nèi)存緩存、不可變**、函數(shù)類型、圖形庫和可用于 I/O、散列、并發(fā)、原語、字符串處理、反射等等的 API 實用程序。
4. XStream
當涉及將對象序列化到 XML 中時,XStream 庫是開發(fā)人員值得信賴的選擇。該庫允許開發(fā)人員輕松地將對象序列化為 XML 并返回。
反射是這里的關(guān)鍵,用于識別在運行時序列化的對象圖的結(jié)構(gòu)。 對象不需要修改。 任何內(nèi)部字段都可以使用 XStream 序列化。
說到 XStream 的功能 – 大多數(shù)對象可以被序列化,并提供特定的映射,提供高性能和低內(nèi)存占用,適用于具有較高吞吐量的大型對象圖和系統(tǒng),信息不重復(fù),可自定義的轉(zhuǎn)換策略,安全的框架,異常情況下的詳細診斷等等。
諸如傳輸,配置,持久化和單元測試等廣泛的應(yīng)用使它成為Java開發(fā)人員社區(qū)中流行的Java庫。
5. Log4j
Log4j 是 Apache 中的一個庫,可用作日志工具。該工具最初由 Ceki Gülcü 開發(fā)。 但是現(xiàn)在,Apache Software Foundation 已經(jīng)接管了這個項目。
Log4j 恰好是其所在應(yīng)用領(lǐng)域中最可靠的庫,可以擴展到支持自定義組件配置。配置語法非常簡單,支持 XML、YAML 和 JSON。
Log4J 提供對多個API的支持,可以在白名單應(yīng)用程序中使用不同版本的 Log4j 或 SLF4J。另一個有趣的功能是它支持用戶自定義的消息對象。最重要的是,它的工作速度相當令人印象深刻。
6. iText
iText 是用于在Java中創(chuàng)建和**作 PDF 文件的Java開源庫。這個庫是由包括布魯諾·洛皮杰(Bruno Lowagie)和保羅·蘇亞雷斯(Paulo Soares)在內(nèi)的團隊創(chuàng)建的。
雖然以前的 iText 版本有很多限制,但最近的版本包括許多新功能,如創(chuàng)建 pdf 的選項,將文檔從 XML、HTML、CSS 或數(shù)據(jù)庫轉(zhuǎn)換為 PDF。生成的 PDF 符合全球通用標準。它還允許在 PDF 中添加交互性并添加數(shù)字簽名。你可以**、合并文檔、導(dǎo)入、更改結(jié)構(gòu)、在 PDF 中添加水印或條形碼 F。
7. jsoup
jsoup 是一個有用的Java庫,用于處理和解析 HTML。Jsoup 提供了一個有用的用于提取數(shù)據(jù)的 API。jsoup 中實現(xiàn)的標準是 WHATWG HTML5。和最新的瀏覽器作法一樣,jsoup 將 HTML 解析為 DOM。
它允許或解析來自任何 URL 或文件的 HTML,例如,你可以獲取 http://noeticforce.com 的主頁信息,解析它,并將所有 H2 標題提取到元素列表中。
它的用途包括清理和**縱 HTML 元素和屬性,以檢索用戶提交的數(shù)據(jù)并過濾掉 XSS 攻擊屬性,使用 jsoup 還可以完成更多功能。
8. Gson
Gson 是 Google 的另一個庫,它輕而易舉的將JavaObjects 轉(zhuǎn)換成等效的 JSON 表示形式。
雖然有一些允許將Java對象轉(zhuǎn)換為 JSON 的開源項目,但它們要求您將Java注釋放在您使用的類中。 顯然,如果您無法訪問源代碼,則無法執(zhí)行此**作,此外,大多數(shù)開源項目都不支持Java泛型。 Gson考慮到這些問題。
它提供了簡單的 toJson()和 fromJson()方法,可用于將Java對象和 JSON 互相轉(zhuǎn)換。 Gson 庫允許將不可修改的對象轉(zhuǎn)換為 JSON 并返回。 如上所述,它為Java泛型提供了極大的支持,并允許對象的自定義表示。
9. Apache PDF box
Apache PDFBox 是另一個可用于**作 PDF 文件的開源庫。這個項目最初由本·利奇菲爾德(Ben Litchfield)發(fā)起的,后來被 Apache 接管。
PDFBox 的主要功能使其成為超級庫,其中包括 PDF 創(chuàng)建、將單個 PDF 分割為多個 PDF 文件、合并并提取 PDF 文本的 Unicode 文本,填寫 PDF 表單,根據(jù) PDF/A 標準驗證 PDF 文件,將 PDF 保存為圖像并對 PDF 進行數(shù)字簽名。
10. Joda Time
這就是我一直強調(diào)的簡單但功能強大的庫,它節(jié)省了大量的開發(fā)時間。 Joda-Time 是一個Java庫,作為Java中日期和時間類的一個很好的替代品。
Joda Time 很容易使用,并且像 getYear()或 getDayOfWeek()這樣的屬性訪問器可以直接獲取日期,及其更詳細的信息。
Joda Time 還提供計算日期和時間的功能,并支持幾乎所有需要的日期格式,而且肯定難以用簡單的 JDK 方法進行**。
除了上述 10 個庫外,還有許多其他通用于特定領(lǐng)域的Java庫應(yīng)用于一些小型或大型的項目。以下是其中一些庫:
Ok HTTP
用于通過 HTTP 協(xié)議有效地在現(xiàn)代應(yīng)用程序之間交換數(shù)據(jù)。 Okhttp 在斷網(wǎng)時恢復(fù)連接,在多個基于 IP 的服務(wù)中切換 IP 地址。 okhttp 的一個有用的功能是與現(xiàn)代 TLS(SNI,ALPN)的自動連接,并且在發(fā)生故障時回到 TLS 1.0。
Quartz
這是另一個通用且有用的Java庫,它集成了任何規(guī)模和大小的Java應(yīng)用程序。 Quartz 庫可用于創(chuàng)建數(shù)百,數(shù)千或更多的作業(yè),可根據(jù)應(yīng)用需求進行擴展。 Quartz 具有諸如 JTA 事務(wù)和集群等功能,可用于企業(yè)級應(yīng)用程序的支持。
Java具有龐大的生態(tài)圈,所以你可以很容易的找到各種各樣的插件庫,你需要做的只是從海量的插件庫中選出哪一個對你的項目更加適合。從頭開發(fā)也是一種選擇,但是當你找到了可以自由使用的插件,為什么還要花費更多的時間來重新開發(fā)構(gòu)建呢?
型號12.5R20
輪胎規(guī)格
12.5R20
輪轂尺寸
20
胎面寬度
295mm
扁平比
80
速度級別
K
TLSF 軍工輪胎12.5R20 真空輪胎 越野輪胎 東風(fēng)246/東風(fēng)EQ2102車輛輪胎 參數(shù)
詳細參數(shù)
品牌
通利盛發(fā)(TLSF)
型號
12.5R20
產(chǎn)地
**北京北京市
CCC認證編號
2005061201001374
生產(chǎn)者(制造商)名稱
雙錢集團(江蘇)輪胎有限公司
輪胎規(guī)格
12.5R20
輪轂尺寸
20
胎面寬度
295mm
扁平比
80
速度級別
K
輪胎特性
常規(guī)胎
花紋性能
越野型
車型類別
卡客車輪胎
openssl 是一個開源項目,其組成主要包括一下三個組件:
openssl:多用途的命令行工具
libcrypto:加密算法庫
libssl:加密模塊應(yīng)用庫,實現(xiàn)了ssl及tls
openssl可以實現(xiàn):秘鑰證書管理、對稱加密和非對稱加密 。
1、對稱加密
對稱加密需要使用的標準命令為 enc ,用法如下:
openssl enc -ciphername [-in filename] [-out filename] [-pass arg] [-e] [-d] [-a/-base64]
[-A] [-k password] [-kfile filename] [-K key] [-iv IV] [-S salt] [-salt] [-nosalt] [-z] [-md]
[-p] [-P] [-bufsize number] [-nopad] [-debug] [-none] [-engine id]
常用選項有:
-in filename:指定要加密的文件存放路徑
-out filename:指定加密后的文件存放路徑
-salt:自動插入一個隨機數(shù)作為文件內(nèi)容加密,默認選項
-e:可以指明一種加密算法,若不指的話將使用默認加密算法
-d:解密,解密時也可以指定算法,若不指定則使用默認算法,但一定要與加密時的算法一致
-a/-base64:使用-base64位編碼格式
示例:
加密:]# openssl enc -e -des3 -a -salt -in fstab -out jiami
解密:]# openssl enc -d -des3 -a -salt -in fstab -out jiami
2、單向加密
單向加密需要使用的標準命令為 dgst ,用法如下:
openssl dgst [-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] [-c] [-d] [-hex] [-binary]
[-out filename] [-sign filename] [-keyform arg] [-passin arg] [-verify filename] [-prverify
filename] [-signature filename] [-hmac key] [file…]
常用選項有:
[-md5|-md4|-md2|-sha1|-sha|-mdc2|-ripemd160|-dss1] :指定一種加密算法
-out filename:將加密的內(nèi)容保存到指定文件中
示例如下:
單向加密除了 openssl dgst 工具還有: md5sum,sha1sum,sha224sum,sha256sum ,sha384sum,sha512sum
示例如下:
3、生成密碼
生成密碼需要使用的標準命令為 passwd ,用法如下:
openssl passwd [-crypt] [-1] [-apr1] [-salt string] [-in file] [-stdin] [-noverify] [-quiet] [-table] {password}
常用選項有:
-1:使用md5加密算法
-salt string:加入隨機數(shù),最多8位隨機數(shù)
-in file:對輸入的文件內(nèi)容進行加密
-stdion:對標準輸入的內(nèi)容進行加密
示例如下:
4、生成隨機數(shù)
生成隨機數(shù)需要用到的標準命令為 rand ,用法如下:
openssl rand [-out file] [-rand file(s)] [-base64] [-hex] num
常用選項有:
-out file:將生成的隨機數(shù)保存至指定文件中
-base64:使用base64 編碼格式
-hex:使用16進制編碼格式
示例如下:
5、生成秘鑰對
第一需要先使用 genrsa 標準命令生成私鑰,第二再使用 rsa 標準命令從私鑰中提取公鑰。
genrsa 的用法如下:
openssl genrsa [-out filename] [-passout arg] [-des] [-des3] [-idea] [-f4] [-3] [-rand file(s)] [-engine id] [numbits]
常用選項有:
-out filename:將生成的私鑰保存至指定的文件中
-des|-des3|-idea:不同的加密算法
numbits:指定生成私鑰的大小,默認是2048
一般情況下秘鑰文件的權(quán)限一定要控制好,只能自己讀寫,因此可以使用 umask 命令設(shè)置生成的私鑰權(quán)限,示例如下:
ras 的用法如下:
openssl rsa [-inform PEM|NET|DER] [-outform PEM|NET|DER] [-in filename] [-passin arg] [-out filename] [-passout arg]
[-sgckey] [-des] [-des3] [-idea] [-text] [-noout] [-modulus] [-check] [-pubin] [-pubout] [-engine id]
常用選項:
-in filename:指明私鑰文件
-out filename:指明將提取出的公鑰保存至指定文件中
-pubout:根據(jù)私鑰提取出公鑰
示例如下:
6、創(chuàng)建CA和申請證書
使用openssl工具創(chuàng)建CA證書和申請證書時,需要先查看配置文件,因為配置文件中對證書的名稱和存放位置等相關(guān)信息都做了定義,具體可參考 /etc/pki/tls/openssl.cnf 文件。
(1)、創(chuàng)建自簽證書
第一步:創(chuàng)建為 CA 提供所需的目錄及文件
第二步:指明證書的開始編號
]# echo 01 >> serial
第三步:生成私鑰,私鑰的文件名與存放位置要與配置文件中的設(shè)置相匹配;
第四步:生成自簽證書,自簽證書的存放位置也要與配置文件中的設(shè)置相匹配,生成證書時需要填寫相應(yīng)的信息;
命令中用到的選項解釋:
-new:表示生成一個新證書簽署請求
-x509:專用于CA生成自簽證書,如果不是自簽證書則不需要此項
-key:生成請求時用到的私鑰文件
-out:證書的保存路徑
-days:證書的有效期限,單位是day(天),默認是365天
(2)頒發(fā)證書
在需要使用證書的主機上生成證書請求,以 httpd 服務(wù)為例,步驟如下:
第一步:在需要使用證書的主機上生成私鑰,這個私鑰文件的位置可以隨意定
第二步:生成證書簽署請求
第三步:將請求通過可靠方式發(fā)送給 CA 主機
第四步:CA 服務(wù)器拿到證書簽署請求文件后頒發(fā)證書,這一步是在 CA 服務(wù)器上做的
查看證書信息的命令為:
(3)吊銷證書
吊銷證書的步驟也是在CA服務(wù)器上執(zhí)行的,以剛才新建的 httpd.crt 證書為例,吊銷步驟如下:
第一步:在客戶機上獲取要吊銷證書的 serial 和 subject 信息
第二步:根據(jù)客戶機提交的 serial 和 subject 信息,對比其余本機數(shù)據(jù)庫 index.txt 中存儲的是否一致
第三步:執(zhí)行吊銷**作
第四步:生成吊銷證書的吊銷編號 (第一次吊銷證書時執(zhí)行)
]# echo 01 > /etc/pki/CA/crlnumber
第五步:更新證書吊銷列表
]# openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
查看 crl 文件命令:
]# openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text
網(wǎng)絡(luò)安全公司 ImmuniWeb 上周發(fā)布了一份報告,內(nèi)容是針對百大機場的公共網(wǎng)站、移動 App、以及在公共代碼存儲庫和暗網(wǎng)上暴露敏感數(shù)據(jù)的基本安全檢查。
遺憾的是,在 Top100 國際機場中,僅有 3 個通過了基本的安全檢查,分別是荷蘭阿姆斯特丹的史基普機場、芬蘭赫爾辛基的萬塔機場、以及愛爾蘭的都柏林國際機場。
【題圖 來自:ImmuniWeb】
ImmuniWeb 指出,這三座機場不僅可以為航空業(yè)、也能夠為其它產(chǎn)業(yè)提供值得稱道的實施案例。
【機場位置分布】
研究涵蓋了 Skytrax 評選的全球六大區(qū)域的 Top100 機場(2019 年數(shù)據(jù)),研究過程中以非侵入性方式對機場外部 IT 資產(chǎn)的安全性、合規(guī)性、和隱私性展開了檢測。
【網(wǎng)站安全等級】
Forrester 在最近的研究中指出,應(yīng)用程序與軟件漏洞,仍是網(wǎng)絡(luò)**分子在外展開攻擊的常見手段。遺憾的是,Top100 中只有 3 個 www 主網(wǎng)站獲得了 A+ 評級,另有 15 個網(wǎng)站為 A 評級。
【易受攻擊或使用過時軟件】
在子域名中,ImmuniWeb 觀察到只有 17% 的 Web Apps 獲得了 A 級評價,大多數(shù)應(yīng)用程序都在 C ~ F 不等的評價。
【子域網(wǎng)站的安全等級】
Gartner 表示,在采用云端 Web 應(yīng)用程序和 API 保護服務(wù)的推動下,Web 應(yīng)用程序的防火墻(WAF)市場正在增長。
【W(wǎng)eb Apps 的防火墻使用情況】
然而全球各大機場運行的 Web 應(yīng)用程序中,很少見到 WAF,其僅能保護 55% 的主網(wǎng)站和 40% 的子域名站點。
主站點 TLS 安全性:15 家主網(wǎng)站拿到了 A+ 評級,38 家為 A,16 家為 B 級。
子域名 TLS 安全性:表現(xiàn)糟糕很多,308 個站點為 F,且有 75 個站點未使用加密連接。
【主站點 PCI DSS 合規(guī)性】
盡管 PCI DSS 合規(guī)性并非必須,但它和《通用數(shù)據(jù)保護條例》(GDPR)都涵蓋了對基礎(chǔ)安全性的要求。
自 2018 年 5 月實施以來,已有有超過 16 萬的數(shù)據(jù)泄露通知,罰款金額為 1.14 億歐元。
讓人震驚的是,只有 27 個主站點符合 PCI DSS 要求。至于 GDPR 合規(guī)性,也只有 24% 的主站點(24 / 100)和 12% 的子域(158 / 1364)達標。
【郵件服務(wù)器的 TLS 安全性】
在 147 個用于接收或中繼電子郵件的服務(wù)器中,幾乎一半(48%)不支持 SSL / TLS 加密,使得攻擊者可輕松展開中間人攻擊,攔截流量、并以純文本格式閱讀電子郵件通信。
大約 21% 的郵件服務(wù)器(32)獲得 A 級評價,其余 44 臺服務(wù)器的 SSL / TLS 實施易受攻擊(較差),且大多數(shù)為 C / F 級。
【移動安全漏洞風(fēng)險等級,基于 CVSSv3 評分】
這項研究中,ImmuniWeb 找到并測試了屬于機場的 36 款官方 App,結(jié)果發(fā)現(xiàn)了 530 個安全和隱私問題,包括 288 個移動安全漏洞(每個 App 平均 15 個)。
【OWSAP 十大移動風(fēng)險分布】
至于移動后端(Web 服務(wù)或 API),只有 55% 的傳出連接使用了恰當?shù)?TLS 加密來保護傳輸中的用戶數(shù)據(jù)。
【移動 App 后端 TLS 加密】
27% 的連接以明文發(fā)送信息,且根本未使用加密(N 級)。5.7% 使用過時、且易受攻擊的 SSLv3 協(xié)議,成績?yōu)椴缓细瘢‵ 級)。
【暗網(wǎng)暴露風(fēng)險等級】
對結(jié)果進行篩查后,ImmuniWeb 發(fā)現(xiàn) Top100 機場中有 66 個,以一種或另一種方式在暗網(wǎng)上暴露。如圖所示,有 13 個機場有重大的泄露或暴露風(fēng)險。
【代碼存儲庫暴露風(fēng)險等級】
最后,在 Top100 機場中,有 87 個在某些公共代碼存儲庫(如 GitHub 或 Bitbucket)中公開了一些敏感或內(nèi)部數(shù)據(jù)。其中識別出了 59 個機場,存在著 227 個具有嚴重風(fēng)險的代碼泄露。
自駕游,就來河北蔚縣。南部山區(qū)分布著五大峪口,自東向西分別為赤崖峪、金河口峪、松枝口峪、九宮口峪、北口峪、石門峪,其中第一二個峪口不能進車,有溪流。其余三個均為自駕天堂。
松枝口峪比較好玩的有輝川溪流、充滿傳奇色彩的地河、嶺南瀑布、鄭家莊子石頭村、榆皮瓦片屋等;
九宮口峪從干河峪或小天山可通往北口峪,比較出名的景點包括小天山、東甸子梁、王喜洞、茶山、閣上(黑龍?zhí)叮?、南溝等,白家莊子是南山典型的石頭村;
北口峪可通往四十里飛狐峪、空中草原,從燕王逼子(閻王鼻子)—笊籬洼—下戰(zhàn),可通往石門峪,比較出名的有尖山、馬蹄梁、岔道八仙洞、一炷香、劍眼、寶鏡、怪坡、兵工場等;
石門峪位于五大峪口最西,也是最容易暴發(fā)山洪的峪口,難怪它的沖擊扇盛產(chǎn)最好吃的小米和加工黃糕面的黍子,往南可上空中草原,通往山西靈丘。
五大峪口,盛景無限。自駕游蔚縣,形象自然深!
]]>