完整的Web應用程序Tomcat JSF Primefaces JPA Hibernate –第3部分

Primefaces AutoComplete,JSF轉換器

這篇文章從第一部分和第二部分繼續。

JSF擁有Converter工具,可以幫助我們從用戶視圖中獲取一些數據并將其轉換為從數據庫或緩存中加載的對象。

在“ com.converter”包中,創建以下類:

package com.converter;import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.convert.*;import com.facade.DogFacade;
import com.model.Dog;@FacesConverter(forClass = com.model.Dog.class)
public class DogConverter implements Converter {@Overridepublic Object getAsObject(FacesContext arg0, UIComponent arg1, String arg2) {DogFacade dogFacade = new DogFacade();int dogId;try {dogId = Integer.parseInt(arg2);} catch (NumberFormatException exception) {throw new ConverterException(new FacesMessage(FacesMessage.SEVERITY_ERROR, 'Type the name of a Dog and select it (or use the dropdow)', 'Type the name of a Dog and select it (or use the dropdow)'));}return dogFacade.findDog(dogId);}@Overridepublic String getAsString(FacesContext arg0, UIComponent arg1, Object arg2) {if (arg2 == null) {return '';}Dog dog = (Dog) arg2;return String.valueOf(dog.getId());}
}

關于上面的代碼:

  • 在@Converter批注中,有一個名為“ forClass”的屬性。 此屬性向de JSF指示“ forClass”中指定的所有類將調用Converter。 DogConverter帶有“ forClass = com.model.Dog.class ”注釋,每次JSF需要Dog類的Converter時,JSF都會調用DogConverter。 無需在“ web.xml”文件中編寫任何代碼。

Primefaces自動完成中需要轉換器代碼。 在下面,您會看到使用“自動完成”有多么容易:

personUpdateDialog.xhtml

人MB.java

關于上面的代碼:

  • 自動完成功能具有多個選項,例如最小查詢長度,啟動查詢的延遲,下拉菜單以顯示所有值等等。 值得一看的是所有選項: http : //primefaces.org/showcase/ui/autoCompleteBasic.jsf和http://primefaces.org/showcase/ui/autocompleteHome.jsf
  • complete ”方法具有在數據庫中找到的值的緩存。 該方法轉到List <Dog>的每個對象,并保留匹配項。
  • 注意,將始終調用Converter,因為您將在AutoComplete組件中找到“ itemValue =”#{dog}” ”。

您可以看到自動完成功能如下:

使用JSFCSS / javascript /圖像

看一下下面的圖片,它將顯示該帖子的應用程序如何處理資源:

master.xhtml

“ index.xhtml”

使用JSF,很容易處理這種資源。 開發人員不再需要使用文件相對路徑。 要像這樣使用資源,請像下面那樣創建文件:

JSF將映射在“ / WebContent / resources”文件夾中找到的所有資源,開發人員將能夠使用上面顯示的資源。

“ web.xml”配置

在文件夾“ WebContent / WEB-INF / ”中,創建以下文件:

web.xml

<?xml version='1.0'?>
<web-app version='3.0' xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd'><display-name>JSFCrudApp</display-name><servlet><servlet-name>Faces Servlet</servlet-name><servlet-class>javax.faces.webapp.FacesServlet</servlet-class><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>Faces Servlet</servlet-name><url-pattern>*.xhtml</url-pattern></servlet-mapping><welcome-file-list><welcome-file>/pages/protected/index.xhtml</welcome-file></welcome-file-list><context-param><param-name>javax.faces.PROJECT_STAGE</param-name><param-value>Development</param-value></context-param><filter><filter-name>LoginCheckFilter</filter-name><filter-class>com.filter.LoginCheckFilter</filter-class><init-param><param-name>loginActionURI</param-name><param-value>/JSFCrudApp/pages/public/login.xhtml</param-value></init-param></filter><filter-mapping><filter-name>LoginCheckFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping><filter><filter-name>AdminPagesFilter</filter-name><filter-class>com.filter.AdminPagesFilter</filter-class></filter><filter-mapping><filter-name>AdminPagesFilter</filter-name><url-pattern>/pages/protected/admin/*</url-pattern></filter-mapping><filter><filter-name>DefaultUserPagesFilter</filter-name><filter-class>com.filter.DefaultUserPagesFilter</filter-class></filter><filter-mapping><filter-name>DefaultUserPagesFilter</filter-name><url-pattern>/pages/protected/defaultUser/*</url-pattern></filter-mapping> 
</web-app>

faces-config.xml

<?xml version='1.0' encoding='UTF-8'?><faces-config xmlns='http://java.sun.com/xml/ns/javaee'xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd'version='2.0'><application><resource-bundle><base-name>messages</base-name><var>bundle</var></resource-bundle><message-bundle>messages</message-bundle></application>
</faces-config>

關于上面的代碼:

  • 您將在web.xml文件中找到所有映射的安全過濾器。 您也可以使用@Filter注釋,它們的作用相同。
  • 屬性“ javax.faces.PROJECT_STAGE ”的值為DEVELOPMENT。 這種配置的優點之一是,如果在屏幕中未找到“ h:message”,則JSF將附加“ h:message”。 如果發生某些異常并且沒有任何可顯示的組件,JSF將在頁面中附加ah:message組件。
  • 在“ faces-config”內部存在一個名為“ message-bundle”的標簽。 此標記允許開發人員覆蓋JSF默認消息,此標記的值將指向具有默認JSF消息鍵的文件。 在“ message.properties”文件(第08頁)中,鍵為“ javax.faces.component.UIInput.REQUIRED ”,您在此鍵中寫入的任何值都會影響應用程序中顯示的所有“必填字段”消息。

增強應用程序的安全性

不要串聯查詢

不要使用通常的“ where id =” + id sql代碼。 這種代碼允許“ SQL Injection ”黑客攻擊。 使用ORM的開發人員也容易受到這種攻擊,但具有不同的名稱:“ HQL注入”。 您可以在Person和User類中找到進行查詢的最佳方法:

是否使用JPA無關緊要,不要將查詢與字符串連接在一起。

開發人員必須意識到“ SQL注入可能在您的應用程序的任何查詢中發生 ”,而不僅僅是登錄查詢中。 如果用戶對您的應用程序具有有效的登錄名,則該用戶可以在所有查詢中執行“ SQL注入 ”。

自動完成關閉

在“ login.xhtml ”頁面中,有以下代碼:

標記為“自動完成”的關閉會告知瀏覽器不應保存此字段。 優秀的瀏覽器(Firefox,Chrome,IE)會尊重此標記,它有助于保護您的應用程序。

如果允許瀏覽器保留密碼,則瀏覽器必須將此密碼存儲在某個位置。 如果黑客發現了該密鑰的存儲位置,他可能會嘗試將其破解。

驗證所有傳入請求

如果僅要求應用程序驗證用戶是否已登錄,則用戶類將不需要角色Enum。

如果沒有角色驗證,則普通用戶可以訪問系統的任何區域,例如管理頁面。 請注意,此應用程序具有始終用于驗證所有請求的用戶角色的過濾器。 “ 隱藏鏈接不是保護措施。 開發人員應始終驗證所有傳入請求 ”。 開發人員可以隱藏URL或按鈕,但是如果用戶在瀏覽器中鍵入URL或模擬get / post調用,則用戶可以訪問應用程序的任何屏幕。

始終使用h:outputText組件

避免跨站點腳本編寫的一種簡單方法是使用h:outputText組件顯示數據庫中的數據。 請注意,在這篇文章中,顯示給de user的所有來自數據庫的值都使用h:outputText組件。 可以避免使用h:outputText組件的情況是,應用程序將顯示“ message.properties”之類的文件中的系統消息。

運行應用程序

啟動Tomcat并檢查數據庫; 請注意,數據庫中還沒有表。

在瀏覽器中鍵入以下URL: http:// localhost / JSFCrudApp / 。

將顯示以下屏幕:

鍵入所需的任何值,然后按登錄按鈕,如果沒有用戶或表,請不要打擾。 只需單擊它。 您將看到以下錯誤消息:

再次檢查數據庫,您將看到所有表都已創建。 應用程序手動控制所有事務,這是JPA / Hibernate在首次調用時才創建表的原因。

您需要創建一個角色為ADMIN的用戶(我將該用戶命名為Real Madrid),以及另一個角色為USER的用戶(我將其命名為Barcelona)。 ADMIN用戶將有權訪問所有文件夾下的所有系統,但具有USER角色的用戶將有權訪問文件夾defaultUser下的頁面。

如果使用ADMIN用戶登錄,您將看到:

現在以具有USER角色的用戶身份登錄:

狗按鈕被隱藏。 即使沒有該按鈕,用戶也可以訪問Dogs的URL,并且只允許ADMIN角色使用Dogs屏幕。

要查看應用程序的行為和非法訪問的行為,請保持使用USER角色的身份登錄,并嘗試訪問以下鏈接: http://localhost/JSFCrudApp/pages/protected/admin/adminIndex.xhtml

將顯示下一個屏幕:

因為AdminPagesFilter檢查請求是否來自ADMIN用戶,所以將顯示此屏幕。 如果用戶不是ADMIN角色,我們的忍者貓就會得到它! [=

參考:在uaiHebert博客上,我們的JCG合作伙伴 Hebert Coelho的Tomcat JSF Primefaces JPA Hibernate完整Web應用程序 。

翻譯自: https://www.javacodegeeks.com/2012/07/full-web-application-tomcat-jsf_4954.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/371964.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/371964.shtml
英文地址,請注明出處:http://en.pswp.cn/news/371964.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

html5首屏加載樂山暴雨,發布前端項目時因chunk-vendors過大導致首屏加載太慢,Vue Build時chunk-vendors的優化方案...

這個優化是兩方面的&#xff0c;前端將文件打包成.gz文件&#xff0c;然后通過nginx的配置&#xff0c;讓瀏覽器直接解析.gz文件。1、compression-webpack-plugin插件打包.gz文件安裝插件npm install --save-dev compression-webpack-plugin或者yarn add compression-webpack-p…

width:100vh與min-height:calc(100vh + 51px)

vh:相對于視窗的高度&#xff0c;那么vw:則是相對于視窗的高度。 “視區”所指為瀏覽器內部的可視區域大小&#xff0c;即window.innerWidth/window.innerHeight大小&#xff0c;不包含任務欄標題欄以及底部工具欄的瀏覽器區域大小。 詳細vh的用法&#xff0c;大家可以參考http…

XML配置文件中的Spring配置文件

我的上一個博客非常簡單&#xff0c;因為它涵蓋了我從Spring 3.0.x到Spring 3.1.x的輕松升級&#xff0c;最后我提到可以將Spring模式升級到3.1&#xff0c;以利用Spring的最新功能。 在今天的博客中&#xff0c;我將介紹這些功能中最酷的功能之一&#xff1a;Spring配置文件。…

交大計算機專業怎樣,計算機專業高校實力排名,上海交大第五,清華第二,第一毫無爭議...

原標題&#xff1a;計算機專業高校實力排名&#xff0c;上海交大第五&#xff0c;清華第二&#xff0c;第一毫無爭議計算機專業在近幾年可謂是“大熱”&#xff0c;眾多考生搶破頭也想當碼農&#xff0c;背后的原因其實不難理解。互聯網時代的到來&#xff0c;計算機早已滲透到…

python_day7 綁定方法與非綁定方法

在類中定義函數如果 不加裝飾器 則默認 為對象作為綁定方法 如果增加 classmethod 是 以 類 作為綁定方法 增加 classmethod 是 非綁定方法&#xff0c;就是不將函數 綁定 ##################### class Foo: def func(self): print(self) classmethod def func…

Spring Security使用Hibernate實現自定義UserDetails

大多數時候&#xff0c;我們將需要在Web應用程序中配置自己的安全訪問角色。 這在Spring Security中很容易實現。 在本文中&#xff0c;我們將看到最簡單的方法。 首先&#xff0c;我們將在數據庫中需要以下表格&#xff1a; CREATE TABLE IF NOT EXISTS mydb.security_role (…

python之路-面向對象

編程范式 編程是 程序 員 用特定的語法數據結構算法組成的代碼來告訴計算機如何執行任務的過程 &#xff0c; 一個程序是程序員為了得到一個任務結果而編寫的一組指令的集合&#xff0c;正所謂條條大路通羅馬&#xff0c;實現一個任務的方式有很多種不同的方式&#xff0c; 對這…

西安郵電大學計算機科學與技術有專碩嗎,2020年西安郵電大學計算機學院考研擬錄取名單及排名!...

20考研復試調劑群&#xff1a;4197552812020年西安郵電大學計算機學院碩士研究生招生復試成績及綜合排名各位考生&#xff1a;現將我院2020年碩士研究生招生復試成績及綜合排名公布(最終錄取名單及新生學籍注冊均以“全國碩士研究生招生信息公開平臺”備案信息為準)&#xff0c…

用Java排序的五種有用方法

Java排序快速概述&#xff1a; 正常的列表&#xff1a; private static List VEGETABLES Arrays.asList("apple", "cocumbers", "blackberry");Collections.sort(VEGETABLES);output: apple, blackberry, cocumbers反向排序&#xff1a; pri…

[python]-數據科學庫Numpy學習

一、Numpy簡介&#xff1a; Python中用列表(list)保存一組值&#xff0c;可以用來當作數組使用&#xff0c;不過由于列表的元素可以是任何對象&#xff0c;因此列表中所保存的是對象的指針。這樣為了保存一個簡單的[1,2,3]&#xff0c;需要有3個指針和三個整數對象。對于數值運…

檢測一個點, 是否在一個半圓之內的方法

demo: http://jsbin.com/lihiwigaso 需求: 一個圓分成分部分, 鼠標滑上不同的區域顯示不同的顏色 思路: 先判斷這個點是否在圓之內, 再判斷是否在所在的三角形之內就可以了 所需要的全部源碼: <!DOCTYPE html> <html> <head><meta charset"utf-8&quo…

計算機網絡設備接地規范,網絡機房防雷接地的四種方式及靜電要求

編輯----河南新時代防雷由于計算機網絡系統的核心設備都放置在網絡機房內&#xff0c;因而網絡機房防雷接地有了較高的環境要求&#xff0c;良好的接地系統是保證機房計算機及網絡設備安全運行&#xff0c;以及工作人員人身安全的重要措施。直流地的接法通常采用網格地&#xf…

抓住尾部的StackOverFlowError

使用Java程序時可能要處理的一種更煩人的情況是StackOverFlowError&#xff0c;如果您有一個很好的可生產的測試用例&#xff0c;那么關于使用堆棧大小或設置條件斷點/某種痕跡 。 但是&#xff0c;如果您有一個測試案例可能一次失敗100次&#xff0c;或者像我的案例一樣在AWTM…

Gunicorn配置部分的翻譯

寫在前面&#xff0c;雖然翻譯得很爛&#xff0c;但也是我的勞動成果&#xff0c;轉載請注明出處&#xff0c;謝謝。 Gunicorn版本號19.7.1 Gunicorn配置 概述 三種配置方式 優先級如下&#xff0c;越后的優先級越大 1.框架的設置&#xff08;現在只有paster在用這個&#xff0…

臺式計算機風扇聲音大怎么處理,如何解決電腦電源風扇聲音大的問題?

現在的臺式機一般用3到5年后&#xff0c;一些問題自然也就慢慢表現出來了。很多網友在使用電腦過程中都有電腦風扇聲音大怎么辦的問題&#xff0c;電腦風扇聲音大就會讓人覺得使用電腦很不舒服&#xff0c;怎么辦好呢&#xff1f;出現重要的問題要如何解決好呢&#xff1f;現在…

jsp分頁功能

http://blog.csdn.net/xiazdong/article/details/6857515轉載于:https://www.cnblogs.com/Baronboy/p/6112403.html

Spring Security第1部分–具有數據庫的簡單登錄應用程序

什么是Spring Security&#xff1f; Spring Security是一個提供安全解決方案的框架&#xff0c;可在Web請求級別和方法級別上處理身份驗證和授權。 Spring安全性通過兩種方式處理安全性。 一種是安全的Web請求&#xff0c;另一種是在URL級別限制訪問。 Spring Security使用Serv…

計算機應用 winxp,2017年職稱計算機考試模塊WindowsXP試題

2017年職稱計算機考試模塊WindowsXP試題全國專業技術人員計算機應用能力考試是專業技術人員資格考試的一種。接下來應屆畢業生小編為大家搜索整理了2017年職稱計算機考試模塊WindowsXP試題&#xff0c;希望大家有所幫助。1. Windows XP中刪除某個文件的快捷方式【 A 】。A. 對原…

Python基礎(8)_迭代器、生成器、列表解析

一、迭代器 1、什么是迭代 1 重復   2 下次重復一定是基于上一次的結果而來 1 l[1,2,3,4] 2 count0 3 while count < len(l): 4 print(l[count]) 5 count1 迭代舉例2、可迭代對象 可進行.__iter__()操作的為可迭代對象 #print(isinstance(str1,Iterable)),判斷str…

Angularjs2-EXCEPTION: Response with status: 200 Ok for URL:

利用jsonp跨域請求數居&#xff0c;報錯 core.umd.js:3070 EXCEPTION: Response with status: 200 Ok for URL: 參考&#xff1a;stackoverflow 未解決。。。腦仁疼。。。有小伙伴也碰到過這個問題么&#xff1f; 16/11/30 問題解決 1.服務器端API允許跨域訪問(返回的數據添加允…