蘇小平
摘要:該文詳細介紹了Web應(yīng)用模式和應(yīng)用框架,深入分析了開源架構(gòu)JFinal和Shiro的特點,介紹了基于JFinal+Shiro的企業(yè)級Web應(yīng)用的常規(guī)架構(gòu),并給出了JFinal整合Shiro構(gòu)建Web應(yīng)用系統(tǒng)的解決方案。
關(guān)鍵詞:框架;模式;MVC;Jfinal;Shiro
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2016)30-0068-03
1 背景
隨著Web技術(shù)和Internet的迅速發(fā)展,Web應(yīng)用需求快速增加,開發(fā)也變得越來越復雜。為了使廣大程序員能夠更加快速有效地構(gòu)建易編寫、易擴展、易維護、易重用的Web應(yīng)用系統(tǒng),選用合適的JAVA開源框架顯得尤為重要?,F(xiàn)在有很多優(yōu)秀的開源框架,包括Hibernate、Shiro、Struts2、JSF、Spring、Jfinal等。在構(gòu)建Web應(yīng)用系統(tǒng)時,程序員可以單獨或者組合使用這些開源框架,最典型的用法就是將Struts2、Spring和Hibernate這三種輕量級的開源框架組合使用的SSH2組合框架搭建Web開發(fā)環(huán)境。SSH2組合框架有很多優(yōu)點,但是配置起來相對復雜。近年來出現(xiàn)的Jfinal框架,不僅可以替代SSH2的大部分功能,而且開發(fā)簡單,配置靈活,程序員更容易上手。本文構(gòu)建了一種基于JFinal+Shiro的Web應(yīng)用程序開發(fā)架構(gòu),不僅能夠簡單迅速的實現(xiàn)業(yè)務(wù)系統(tǒng)功能,而且還能方便快速地完成權(quán)限設(shè)置功能。
2 Web應(yīng)用模式與框架
2.1 Web應(yīng)用模式
早期的Web應(yīng)用系統(tǒng)采用的是兩層架構(gòu)的B/S(Browser-Server,即瀏覽器-服務(wù)器)模式,與傳統(tǒng)的C/S開發(fā)模式相比,基于B/S的Web應(yīng)用系統(tǒng)無需在每臺機器上安裝應(yīng)用軟件,只需將應(yīng)用部署到服務(wù)器上,客戶端安裝瀏覽器即可訪問。這一階段的Web應(yīng)用的核心是用戶通過客戶端的瀏覽器向服務(wù)器發(fā)起請求,服務(wù)器處理后將結(jié)果返回給客戶端。程序員的關(guān)注點在于瀏覽器與服務(wù)器之間如何實現(xiàn)交互,并且采用何種技術(shù),JSP、ASP還是CGI實現(xiàn)交互。
隨著Web技術(shù)的發(fā)展,程序員的關(guān)注點由如何實現(xiàn)交互變?yōu)槿绾螛?gòu)建易于維護擴展的Web應(yīng)用系統(tǒng),進而有了MVC(Model-View-Controller,即模型-視圖-控制器)模式。MVC模式中的模型(Model)用于封裝業(yè)務(wù)數(shù)據(jù)并且提供對數(shù)據(jù)的增刪改查等處理方法,通常會將這些操作封裝成JavaBean供控制層調(diào)用。視圖(View)在Web應(yīng)用系統(tǒng)中負責與用戶實現(xiàn)交互,是瀏覽器展現(xiàn)給用戶的操作界面,用于實現(xiàn)數(shù)據(jù)的輸入輸出等功能,早期的MVC中的視圖部分是由HTML語言實現(xiàn)靜態(tài)頁面,由JSP語言實現(xiàn)動態(tài)頁面的編寫。隨著Web應(yīng)用需求不斷變化,系統(tǒng)界面也越來越復雜,程序員更傾向于使用功能更強大的Struts、HTML5、JSTL等語言實現(xiàn)視圖??刂破鳎–ontroller)主要負責協(xié)調(diào)視圖和模型,它攔截客戶端的HTTP請求,調(diào)用模型層的方法進行處理后,將視圖結(jié)果通過瀏覽器返回給用戶。
2.2 Web應(yīng)用框架
Web應(yīng)用框架可以理解為是基于程序員的開發(fā)經(jīng)驗編寫的可重用的Web開發(fā)架構(gòu),可以在此基礎(chǔ)上開發(fā)新的Web應(yīng)用。在進行企業(yè)級Web應(yīng)用開發(fā)時,選用成熟的框架不但可以降低開發(fā)成本和開發(fā)周期,也可以使軟件開發(fā)人員將更多的精力集中于業(yè)務(wù)需求的研發(fā)減少底層代碼的開發(fā)工作。現(xiàn)在有許多優(yōu)秀的開源的Web開發(fā)框架,例如,用于模型層對數(shù)據(jù)進行持久化的開源框架有iBatis、Hibernate、Jfinal等,用于視圖層對數(shù)據(jù)進行展現(xiàn)的開源框架有Struts、JSTL、FreeMarker等,用于控制層的框架有Spring、Jfinal、WebWork等,用于進行權(quán)限設(shè)計的開源框架有Acegi、JOSSO、Shiro等。在進行Web應(yīng)用程序開發(fā)時,我們可以選用其中某一個架構(gòu),也可以將這些架構(gòu)整合起來使用。
2.3 Web應(yīng)用系統(tǒng)的權(quán)限管理
對于企業(yè)級Web應(yīng)用系統(tǒng)而言,不能只著眼于業(yè)務(wù)需求的實現(xiàn),還得考慮應(yīng)用系統(tǒng)的安全性。Web應(yīng)用系統(tǒng)安全管理涉及很多方面,包括網(wǎng)絡(luò)安全和訪問控制安全等。訪問控制安全又分為功能訪問控制和數(shù)據(jù)訪問控制。在企業(yè)級Web應(yīng)用系統(tǒng)中,最常用的權(quán)限管理模型就是RBAC(Role-Based Access Control,基于角色的訪問控制)模型,該模型詮釋了用戶、角色和權(quán)限三者之間的多對多的關(guān)系,即一個用戶可以擁有若干角色,一個角色可以擁有若干權(quán)限,從而變相的讓一個用戶擁有多個權(quán)限。Shiro框架很好地實現(xiàn)了Web應(yīng)用系統(tǒng)的安全認證和權(quán)限控制。
3 基于Jfinal +Shiro的Web應(yīng)用架構(gòu)研究
3.1 JFinal框架
JFinal是JAVA架構(gòu)師詹波于2011年初設(shè)計開發(fā),并于2012年開源的一款Web開發(fā)框架,雖然出現(xiàn)的晚,但由于其具有開發(fā)迅速、易擴展等優(yōu)勢,近年來越來越受到廣大架構(gòu)師和程序員的青睞。JFinal是基于Java語言的極速Web + ORM框架,具有如下優(yōu)點:
1)整個開發(fā)包體積很小,只有180K左右,并且不依賴于其他第三方開發(fā)包;
2)體系結(jié)構(gòu)上由于采用的是Plugin插件式結(jié)構(gòu),因此具有極強的擴展性;
3)設(shè)計上完全遵循COC(Convention over Configuration,優(yōu)于配置)原則,無XML,實現(xiàn)了零配置;
4)開發(fā)過程中能夠自動加載被修改的JAVA類文件,程序員無需反復重啟Web服務(wù)器;
5)使用簡單方便,設(shè)計精巧靈活,很好的實踐了MVC模式;
6)視圖層提供對多種語言的支持,包括Velocity、JSP和FreeMarker等;
7)模型層支持ActiveRecord,Model類的每個對象對應(yīng)數(shù)據(jù)庫的一條記錄,從而使得數(shù)據(jù)庫開發(fā)效率達到極致;
8)控制層支持AOP,具有豐富的配置靈活的攔截器;
3.2 Shiro框架
Shiro是Apache基金會項目,是實現(xiàn) Web應(yīng)用系統(tǒng)安全框架的主流選擇,與Spring security相比,Shiro簡單易用,足夠完成一般的企業(yè)級Web應(yīng)用系統(tǒng)的安全認證功能。Shiro為開發(fā)人員提供了身份認證、授權(quán)、數(shù)據(jù)加密和會話管理等功能,但Shiro本身不會自動維護用戶和權(quán)限,這些需要程序員通過代碼實現(xiàn),然后注入給Shiro相應(yīng)的接口即可。
3.3 基于JFinal+Shiro的Web應(yīng)用系統(tǒng)常規(guī)架構(gòu)
通常情況下,構(gòu)成Web應(yīng)用程序的基本要素包括Web應(yīng)用系統(tǒng)服務(wù)器、網(wǎng)絡(luò)和瀏覽器。采用B/S架構(gòu)的Web應(yīng)用系統(tǒng)只需要將應(yīng)用部署在服務(wù)器上,其他機器上只需要安裝瀏覽器即可訪問?;贘Final+Shiro的Web應(yīng)用系統(tǒng)的常規(guī)架構(gòu)可分為四層,分別是數(shù)據(jù)層、業(yè)務(wù)邏輯層、表現(xiàn)層和客戶層,如下圖所示。
3.4 基于JFinal+Shiro的Web應(yīng)用系統(tǒng)開發(fā)過程
構(gòu)建基于JFinal+Shiro的企業(yè)級的Web應(yīng)用系統(tǒng)時使用JFinal實現(xiàn)系統(tǒng)功能的快速開發(fā),使用Shiro實現(xiàn)用戶權(quán)限管理,整個工程架構(gòu)搭建過程如下:
1)新建Web工程,并導入jFinal相關(guān)的jar包
在IDE集成開發(fā)環(huán)境Eclipse中新建動態(tài)Web工程,然后將JFinal的開發(fā)包jfinal-1.9-bin-with-src.jar和jfinal-ext-3.1.3.jar添加到工程的WebRoot/WEB-INF/lib目錄下;
2)修改web.xml文件
在web.xml文件中添加JFinal的攔截器,代碼如下:
3)進行其他配置
編寫一個繼承JFinalConfig的子類,需要實現(xiàn)五個抽象方法configConstant、configRoute、configPlugin、configInterceptor和configHandler,分別表示配置常量、配置路由規(guī)則、配置系統(tǒng)插件、配置攔截器和配置處理器,該類用于對整個Web項目進行配置。部分代碼如下:
4)驗證JFinal框架
通過以上幾個步驟,成功地將JFinal框架集成到Web項目中,JFinal如何使用呢?我們簡單的舉個例子,創(chuàng)建一個繼承自com.jfinal.core.Controller的HelloController文件,代碼如下:
啟動Web服務(wù)器,在瀏覽器中輸入http://localhost,頁面顯示“Hello JFinal !”即表示JFinal框架集成成功,可以開始使用。
下面的步驟5)~9)將介紹如何將Shiro集成到Web工程中,并完成與JFinal的整合。
5)將Shiro相關(guān)的jar包導入到Web工程中
將開發(fā)相關(guān)的shiro-all-1.2.1.jar和JFinalShiroPlugin-1.0.jar拷貝到WebRoot\WEB-INF\lib目錄下。
6)修改web.xml文件
在web.xml文件配置Shiro Servlet過濾器從而實現(xiàn)Shiro與Web應(yīng)用的集成,代碼如下:
需要注意的是,我們在web.xml中分別配置了JFinal和Shiro的過濾器,一定將要Shiro 的過濾器放在前面,否則會報錯org.apache.shiro.UnavailableSecurityManagerException。
7)編寫Shiro.ini文件
8)重寫shiro.ini文件中指定的ShiroDbRealm文件
Realm在Shiro安全框架中有著舉足輕重的作用,在執(zhí)行授權(quán)和認證時,Shiro會從Realm中查詢賬戶信息及其對應(yīng)的權(quán)限。程序員可以使用Shiro框架中內(nèi)置的Realm,也可以繼承AuthorizingRealm類實現(xiàn)自定義的Realm。
9)利用Shiro框架實現(xiàn)認證與訪問控制
通過以上幾個步驟,成功的將Shiro框架集成到Web項目中并且完成了與JFinal的組合,接下來就可以利用Shiro來對Web應(yīng)用系統(tǒng)進行認證并實現(xiàn)訪問控制了。用戶認證的部分代碼如下:
4 結(jié)束語
在進行企業(yè)級Web應(yīng)用開發(fā)時,框架的選擇非常重要。選用優(yōu)秀的而框架不僅可以節(jié)約開發(fā)成本,縮短開發(fā)周期,提高開發(fā)效率,而且更方便系統(tǒng)后期的維護。本文在深入研究JFinal和Shiro開源框架的基礎(chǔ)上,通過對Web應(yīng)用分層模型的分析,提出基于JFinal+Shiro構(gòu)建Web應(yīng)用系統(tǒng)的解決方案。這種方案不但能夠完美替代傳統(tǒng)的SSH2組合框架,還能實現(xiàn)企業(yè)級Web應(yīng)用的授權(quán)和認證,已應(yīng)用于多個項目中。
參考文獻:
[1] jFinal[EB/OL]. http://www.jfinal.com.
[2] Apache Shiro[EB/OL].http://shiro.apache.org.
[3] 楊寧, 劉丹軍. 基于JFinal框架的Java Web應(yīng)用開發(fā)研究[J]. 電腦知識與技術(shù),2014,10(7):1440-1443.
[4] 魯杰, 程家興, 段震. 使用框架構(gòu)建Web應(yīng)用系統(tǒng)[J]. 計算機技術(shù)與發(fā)展, 2004, 14(5):110-112.
[5] 李峰, 劉彥隆. 基于SSH框架與jQuery技術(shù)的JavaWeb開發(fā)應(yīng)用[J]. 科技情報開發(fā)與經(jīng)濟, 2010(6).