本文接續上一篇,主要在實作程式碼的部份。
首先使用NetBeans建立一個新的Apache Wicket專案,並命名為myrp。依據原文所寫,作者將Web Application中負責和Open ID OP進行通訊的相關功能,放在model的套件中,其中分為兩個項目:
Saturday, July 14, 2012
Friday, July 13, 2012
使用openid4java實作Open ID RP (1)
本文的原始出處是IBM技術文章!
為了要實作OpenID Provider的Java Web Application,我認為要先了解如何在Java Web Application中先實作Open ID RP,以了解Open ID的運作方式。
在OpenID的官網中,針對Java有提供了許多函式庫可以讓我們來使用,在原始文件中是使用openid4java的函式庫,目前可以取得的版本為0.9.6。
另外,為了要試驗Apache Wicket此framework的功能,我也改用Apache Wicket 1.5.3的版本,它和原始文章所使用的版本(1.3.3),在實作上有一些差異!
還有,本文主要說明概念的部份,實作則在下一篇。
為了要實作OpenID Provider的Java Web Application,我認為要先了解如何在Java Web Application中先實作Open ID RP,以了解Open ID的運作方式。
在OpenID的官網中,針對Java有提供了許多函式庫可以讓我們來使用,在原始文件中是使用openid4java的函式庫,目前可以取得的版本為0.9.6。
另外,為了要試驗Apache Wicket此framework的功能,我也改用Apache Wicket 1.5.3的版本,它和原始文章所使用的版本(1.3.3),在實作上有一些差異!
還有,本文主要說明概念的部份,實作則在下一篇。
Thursday, July 12, 2012
Accordions
Accordions的功能和TabPane或是CardPane類似,都可以將用不到的元件先隱藏起來,只顯示目前要使用的元件。不過,Accordions是以類似手風琴的折疊方式,只顯示出標題(header)以供使用者點選。
本文的範例來源一樣是官網,它呈現了結帳的3個步驟。
要注意的是,預設狀況之下,Accordions能允許使用者任意選擇不同的panel,但是此範例則限制使用者只能按『下一步』的按鈕,以瀏覽下一個panel。
本文的範例來源一樣是官網,它呈現了結帳的3個步驟。
要注意的是,預設狀況之下,Accordions能允許使用者任意選擇不同的panel,但是此範例則限制使用者只能按『下一步』的按鈕,以瀏覽下一個panel。
FlowPane
FlowPane是讓元件以水平線進行排列的容器,並且具有自動換行的功能。它可以讓元件靠左、靠右或置中對齊,也可以讓元件以垂直對齊基準線(baseline)進行排列。
本範例仍然取自官網,在範例中使用了BaselineDecorator(org.apache.pivot.wtk.effects)來顯示基準線,如果使用者未點選『對齊基準線』的選項,則會顯示出藍線,反之則顯示紅線。
本範例仍然取自官網,在範例中使用了BaselineDecorator(org.apache.pivot.wtk.effects)來顯示基準線,如果使用者未點選『對齊基準線』的選項,則會顯示出藍線,反之則顯示紅線。
text - TextInput
Pivot提供了兩種輸入文字的元件,TextInput→單行未格式化的文字,它也可以使用密碼的方式來呈現文字;另一個元件則是TextArea,可允許輸入多行且格式化的文字。本文先介紹TextInput元件。
本範例是由官網取得。它的功能是當使用輸入的字元足以判斷出唯一的值時,系統會自動幫使用者填入剩餘的字元(顯示台中市各區名稱)。
本範例是由官網取得。它的功能是當使用輸入的字元足以判斷出唯一的值時,系統會自動幫使用者填入剩餘的字元(顯示台中市各區名稱)。
Repeatable List Buttons
Pivot支援repeatable list button,意思是使用者可以簡單的重複執行選定的項目。它適合用來執行像橡皮圖章(rubber stamp)的功能。
本範例由官網所取得,它展示的就是使用List Button來自動設定已選定之CheckBox元件的文字顏色。
本範例由官網所取得,它展示的就是使用List Button來自動設定已選定之CheckBox元件的文字顏色。
Wednesday, July 11, 2012
List - ListView
Pivot的WTK元件中,List屬於可條列許多項目,並且允許使用者進行選擇的元件,它通常會搭配ScrollPane進行捲動顯示的效果。List包含了ListView及ListButton. ListView,ListButton則是按下後會跳出popup選單,讓使用者進行選擇。本文將先介紹ListView元件。
基本上ListView並不具備捲動功能,因此必須將之附屬於ScrollPane元件之中,ScorllPane會自動依據內容的多寡而調整元件的高度,UI設計人員無須介入。更詳細的ScrollPane介紹留待以後說明。本範例由官網取得。
基本上ListView並不具備捲動功能,因此必須將之附屬於ScrollPane元件之中,ScorllPane會自動依據內容的多寡而調整元件的高度,UI設計人員無須介入。更詳細的ScrollPane介紹留待以後說明。本範例由官網取得。
LinkButton
本範例將結合CardPane以及Link Button達成圖片瀏覽的功能。CardPane就如同一疊卡片一般,同一時間只能顯示一張卡片,詳細留待往後說明。本範例由官網取得。
在此ui.bxml中,使用了另一種事件處理機制,用<buttonPressListeners></buttonPressListeners>,也就是將要進行的事件處理撰寫在<buttonPressListeners></buttonPressListeners>區塊中。在範例中所寫的處理機制是要設定選擇了在CardPane中的哪一個card。
在此ui.bxml中,使用了另一種事件處理機制,用<buttonPressListeners></buttonPressListeners>,也就是將要進行的事件處理撰寫在<buttonPressListeners></buttonPressListeners>區塊中。在範例中所寫的處理機制是要設定選擇了在CardPane中的哪一個card。
Tuesday, July 10, 2012
Radio Button
本範例和Push Button範例相同,都必須建立客制化的Window類別,並實作Bindable介面,在本文中它被稱為RBWindows,同時它也放置在myex的套件中(myex#RBWindows)。
在這個範例(由官網取得)中,我們針對3個RadioButton建立了一個群組(ButtonGroup)稱為numbers。同時在它們下方有一個PushButton,按下它會以Alert顯示出哪一個RadioButton是被選取的。
在這個範例(由官網取得)中,我們針對3個RadioButton建立了一個群組(ButtonGroup)稱為numbers。同時在它們下方有一個PushButton,按下它會以Alert顯示出哪一個RadioButton是被選取的。
Toggle Button
Toggle Button顧名思義,表示它可以是某項行為的開關!當按下之後,按鈕本身會呈現凹陷的狀態,若再按一次則會回復成原狀!
在以下的範例(由官網取得)中,使用了org.apache.pivot.wtk.content.ButtonData物件來描述按鈕的文字及圖示(icon)。
在以下的範例(由官網取得)中,使用了org.apache.pivot.wtk.content.ButtonData物件來描述按鈕的文字及圖示(icon)。
PushButton、事件處理與中文
本篇文章將介紹如何使用BXML建立Push Button並且實作它的事件處理機制,同時也會對中文字的顯示有不同的處理方式。
本專案(由官網取得)可分成二個部份來說明,首先ui.bxml會利用到自訂的命名空間(namespace)-> myex,也因此會在專案中新增一個package名稱為myex,在myex中會建立一個類別PushButtons,它是自訂的Window類別,同時也繼承了Bindable介面,專門用來和使用者介面中的Push Button進行對應,包含了事件處理。
第二部份則是會將ui.bxml放在根目錄底下,它會引用到myex套件中所定義的自訂Window類別PushButtons。另外,程式的進入點仍是NewClass.java,此類別會讀取ui.bxml,並且經由序列化的處理將Window對應到PushButtons。
本專案(由官網取得)可分成二個部份來說明,首先ui.bxml會利用到自訂的命名空間(namespace)-> myex,也因此會在專案中新增一個package名稱為myex,在myex中會建立一個類別PushButtons,它是自訂的Window類別,同時也繼承了Bindable介面,專門用來和使用者介面中的Push Button進行對應,包含了事件處理。
第二部份則是會將ui.bxml放在根目錄底下,它會引用到myex套件中所定義的自訂Window類別PushButtons。另外,程式的進入點仍是NewClass.java,此類別會讀取ui.bxml,並且經由序列化的處理將Window對應到PushButtons。
Lables及ImageView
在pivot專案(由官網取得)中撰寫如下bxml檔案,用來設計UI。
<!--ui.bxml--> <Window title="Labels" maximized="true" xmlns:bxml="http://pivot.apache.org/bxml" xmlns="org.apache.pivot.wtk"> <BoxPane styles="{padding:4, verticalAlignment:'center'}"> <ImageView image="/clock.png"/> <Label text="現在的時間是?" styles="{font:'PMingLiU bold 24'}"/> </BoxPane> </Window>
Monday, July 9, 2012
Apache Pivot 平台概論
Apache Pivot提供了許多基礎類別,以建立複雜及優美的使用者介面。主要分成四大類別:
- Core:非UI的共同類別。
- WTK:使用者介面(user interface development)相關類別,包括:windows dialogs buttons lists textinput layout drag and drop等等。
- Web:和遠端服務(RestFul web service soap json)進行連線相關類別。
- Charts:可以在Pivot應用程式中建立互動式圖表功能的類別。
使用BXML設定UI
Apache Pivot的另一個特色是可以使用BXML(bean xml)來設定使用者介面(UI)。
本文將介紹簡易的BXML使用法。在java原始碼中,必須使用BXMLSerializer來將bxml中的UI設定轉化為java中的UI物件,並且讀入bxml後必須再將物件進行強迫轉型,將物件轉為org.apache.pivot.wtk.Window物件。
本文將介紹簡易的BXML使用法。在java原始碼中,必須使用BXMLSerializer來將bxml中的UI設定轉化為java中的UI物件,並且讀入bxml後必須再將物件進行強迫轉型,將物件轉為org.apache.pivot.wtk.Window物件。
Friday, July 6, 2012
Apache Pivot初探
Apache Pivot是用來建立IIA(Installable Internet Application)應用程式的java函式庫,它最大的特點是元件優美而且執行流暢,而且可以使用Java Web Start的方式進行啟動(也可以當成一般的桌面AP來啟動,或是使用Applet的方式內嵌入網頁中)。
Apache Pivot的位階等同於Java FX、Microsoft Silverlight或是Adobe Flash。本文將介紹三種不同啟動Pivot程式的方法。
Apache Pivot的位階等同於Java FX、Microsoft Silverlight或是Adobe Flash。本文將介紹三種不同啟動Pivot程式的方法。
Tuesday, June 12, 2012
Apache Wicket Auth/Roles -- 系列文章
花了一些時間將Apache Wicket Auth/Roles專案對於驗證及授權的機制加以實作(以Wicket Example上的範例稍加修改)後,總算對於它的運作有了基礎的了解,為了方便看文,所以在這裡做了一個連結的文章,以後若有新增相關的文章,也會一併在此更新。
Apache Wicket Auth/Roles 簡介 -- Authorization (3)
本文同樣延續上一篇的範例,本文會再新增兩個頁面,這些頁面會視使用者的角色而呈現出不同的內容。也可以說,頁面的內容可以自訂允許哪些角色看到什麼內容。
新增的兩個頁面分別是AdminPanelPage.html(使用meta data授權)及AdminAnnotationPanelPage.html(使用annotation授權)。
因此,在HomePage.html也要新增兩個超連結。
新增的兩個頁面分別是AdminPanelPage.html(使用meta data授權)及AdminAnnotationPanelPage.html(使用annotation授權)。
因此,在HomePage.html也要新增兩個超連結。
Monday, June 11, 2012
Apache Wicket Auth/Roles 簡介 -- Authorization (2)
本文將延續前一篇的範例,將它的授權(authorization)應用到網頁中的某個元件,例如只有ADMIN才能看到某個Panel,其餘的使用者則無法看到!
在本文中我們會在網站中新增兩個頁面,這兩個頁面均是內部頁面(意即非bookmarkable),只是其中之一使用meta data進行授權,而另一頁則使用annotation授權。
所以,在首頁(HomePage.html)的地方,我們新增了兩個超連結,其中一個是AdminInternalPage.html(使用meta data授權);另一個是AdminInternalAnnotationPage.html(使用annotation授權):
在本文中我們會在網站中新增兩個頁面,這兩個頁面均是內部頁面(意即非bookmarkable),只是其中之一使用meta data進行授權,而另一頁則使用annotation授權。
所以,在首頁(HomePage.html)的地方,我們新增了兩個超連結,其中一個是AdminInternalPage.html(使用meta data授權);另一個是AdminInternalAnnotationPage.html(使用annotation授權):
Thursday, June 7, 2012
Apache Wicket Auth/Roles 簡介 -- Authorization (1)
Wednesday, June 6, 2012
Apache Wicket Auth/Roles 簡介 -- Authentication (3)
本篇文章是更為進階的身份驗證範例,使用Annotation來進行頁面的權限設定,因為如果使用前二篇文章(一、二)中的範例來設定頁面的存取權限,維護各頁面權限的工作會變得很煩瑣。
本範例程式和先前範例程式相比,程式碼變得更為簡潔,而且需要修改的部份不多,茲分述如下:
程式碼不須變動部份:
1.SignIn.html
2.SignIn.java
3.Session.java
4.SignOut.html
5.SignOut.java
-- 體驗範例程式 --
本範例程式和先前範例程式相比,程式碼變得更為簡潔,而且需要修改的部份不多,茲分述如下:
程式碼不須變動部份:
1.SignIn.html
2.SignIn.java
3.Session.java
4.SignOut.html
5.SignOut.java
Apache Wicket Auth/Roles 簡介 -- Authentication (2)
接續上一篇文章,本文的範例則是使用Auth/Roles套件中內建的SignInPanel,來呈現登入畫面,同時它亦可設定是否要將登入資訊儲存在cookie中。
本範例大部份程式碼都和上一篇相同,只有一小部份有稍加修改,茲表列如下:
相同的部份:
1.Application.java
2.SignOut.html
3.SignOut.java
-- 體驗範例程式 --
本範例大部份程式碼都和上一篇相同,只有一小部份有稍加修改,茲表列如下:
相同的部份:
1.Application.java
2.SignOut.html
3.SignOut.java
Apache Wicket Auth/Roles 簡介 -- Authentication (1)
Apache Wicket Auth/Roles是Apache Wicket的延伸套件,它讓認證(Authentication)及授權(Authorization)變得簡單易用。
本系列文章將以Apacke Wicket Example裡的範例來進行說明,Wicket的版本為1.5x。
首先,Auth/Roles套件實作了IAuthorizationStrategy介面;當授權策略(authorization strategy)安裝在安全性設定中(WebApplication#getSecuritySettings),Wicket將會自動檢查所有元件(component)是否具備可以初始化(instaintion)或是呈現畫面(render)的權限。
本系列文章將以Apacke Wicket Example裡的範例來進行說明,Wicket的版本為1.5x。
首先,Auth/Roles套件實作了IAuthorizationStrategy介面;當授權策略(authorization strategy)安裝在安全性設定中(WebApplication#getSecuritySettings),Wicket將會自動檢查所有元件(component)是否具備可以初始化(instaintion)或是呈現畫面(render)的權限。
Tuesday, May 22, 2012
使用jarsigner對jar檔進行簽章
若要對jar進行簽章,首先要有一張憑證,缺$一族可使用java keytoo工具可產生自我簽發的憑證(參考這裡)!
使用jarsigner工具對test.jar進行簽章的指令如下:
各參數說明如下:
使用jarsigner工具對test.jar進行簽章的指令如下:
jarsigner -keystore test.jks -keypass test test.jar alias-test
各參數說明如下:
-keystore 符合java keystore格式的憑證路徑 -storepass 該憑證的密碼 *.jar 欲簽章之jar檔 alias-test 此憑證之別名
Wednesday, May 9, 2012
Java列出所有系統相關資訊
下列程式碼可以列出所有系統資訊
Properties props = System.getProperties(); //使用Enumeration走訪Map物件 Enumeration enumeration = props.propertyNames(); while (enumeration.hasMoreElements()) { String name = (String) enumeration.nextElement(); String value = (String) props.getProperty(name); System.out.println(name + ":" + value); }
Friday, May 4, 2012
使用Java Applet製作自然人憑證登入驗證(1)
因為要實作使用自然人憑證來登入網站並達到跨browser的功能,因此打算以Applet的方式來呼叫HiSecue的Win32 API,不過因為在Java中呼叫JNI屬於特權模式,所以Applet程式必須打包成JAR檔,並且將它簽章後同時獲得客戶端的同意才得以在瀏覽器中執行。
另一方面,若要進行簽章必須先取得獲CA認證的憑證,但是要取得CA核發的憑證要很多$,因此可以參考另一篇,以JDK的keytool工具製作自我核發的憑證。
另一方面,若要進行簽章必須先取得獲CA認證的憑證,但是要取得CA核發的憑證要很多$,因此可以參考另一篇,以JDK的keytool工具製作自我核發的憑證。
使用Java Applet製作自然人憑證登入驗證(2)
接續上一篇,繼續實作!
4.在JApplet的run()中,呼叫具特權模式類別。
4.在JApplet的run()中,呼叫具特權模式類別。
java.awt.EventQueue.invokeAndWait(new Runnable() { public void run() { initComponents(); //產生新特權模式類別 checkCard check = new checkCard(); //以AccessController的static method執行特權模式指令 String s = (String)AccessController.doPrivileged(check); } });
Thursday, May 3, 2012
Netbeans 7.x對jar檔自動簽章
要在Netbeans中設定在建置專案時自動對jar檔自動簽章的步驟如下:
1.打開project.properties檔案。在最後方加入下列設定。
1.打開project.properties檔案。在最後方加入下列設定。
#加入自動化自我簽章 jarsign.jarsigner=jarsigner.exe路徑 jarsign.keystore=已核發之憑證檔 jarsign.storepass=憑證檔密碼 jarsign.signedjar=${dist.dir} jarsign.alias=憑證別名
使用Keytool產生自我核發的憑證
為了要讓Applet可以在客戶端具有特殊權限,例如:存取客戶端的檔案系統,必須要對JAR檔進行簽章的動作,但是要申請一個憑證必須要有$$,因此為了測試我們可以使用JDK內建的keytool工具來產生金鑰並核發憑證給自己!
測試環境:JDK 1.6.31 Windows 7 x64 命令列模式
測試環境:JDK 1.6.31 Windows 7 x64 命令列模式
- 輸入下列指令可以直接產生自我核發之憑證
#使用Java的keytool指令 keytool -genkey -alias test -keysize 2048 -keyalg RSA -sigalg SHA1withRSA -keypass test1234 -storepass test1234 -validity 365 -dname "CN=testname, OU=testunit, O=testorg, L=testlocation,S=teststate , C=TW" -keystore test.jks
Friday, April 27, 2012
Glassfish3入門 (3)-整合mod_jk
一般的網頁伺服器會使用httpd來顯示靜態網頁,而使用tomcat或是glassfish當成是jsp動態網頁或是servlet的容器,但是使用者若要進入java-based的網站還要輸入port number(例如:8080),會造成使用者的困擾,同時網管人員也可能因為安全因素而不開放8080埠,本文將介紹使用mod_jk讓httpd自動轉發servlet或是jsp之頁面要求至glassfish伺服器。(本文是參考Glassfish 3.1.2版之administration-guide)
- 伺服器(CentOS 5.8 x64)既有服務:apache httpd 2.2、glassfish 3.1.2 (已有一個domain叫app,並且發佈了一個web專案叫School)。
Monday, April 2, 2012
GlassFish3 入門 (2) -- 以non-root的權限執行服務
為了避免執行GlassFish服務的使用者具有太大的權限,例如前文的root,因此我們可以建立一個較低權限的使用者來啟動服務。
- 首先建立一個群組glassfish3,並且新增一個使用者glassfish,此使用者沒有home directory。
sudo groupadd glassfish3 sudo useradd -s /bin/bash -M -g glassfish3 glassfish
- 將/opt/glassfish3的所有權轉給glassfish。
sudo chown -Rf glassfish.glassfish3 /opt/glassfish3
- 修改/etc/init.d/GlassFish_test,讓它可以用glassfish的權限啟動服務。
Sunday, April 1, 2012
GlassFish3 入門 (1) -- 初始設定
為了專案開發需要,採用了glassfish3當成是Web Service的容器。為免以後忘記如何將服務架起來,只好記錄下來囉!
本文使用的是glassfish3 open source edition - 3.1.2,可在此下載。主機採用CentOS 5搭配JDK 6u31的執行環境。
本文使用的是glassfish3 open source edition - 3.1.2,可在此下載。主機採用CentOS 5搭配JDK 6u31的執行環境。
- 先將JDK以及glassfish3解壓縮在/opt底下。(JAVA_HOME請自行設定,在此不詳述)
- 設定基礎環境(編輯/opt/glassfish3/glassfish/config/asenv.conf),加入以下兩行指令,指定預設之Java Home及glassfish3安裝路徑,可避免自動啟動服務時發生錯誤。
AS_JAVA="/opt/jdk1.6.0_27"
AS_HOME="/opt/glassfish3/glassfish"
- 進入/opt/glassfish3/bin裡,輸入sh asadmin,可以進入管理畫面。
- 可先將預設domain1刪除(delete-domain domain1)
- 建立自己的domain(create-domain test),按下Enter即可自動設定(預設沒有密碼)。
- 設定開機自動啟動服務。
- 進入管理介面後,輸入create-service [instance]指令,此處的instance指的是domain名稱。
- 指令成功執行後,會自動將啟動指令檔複製到/etc/inid.d/以及/etc/rcN.d底下(此處的N為0-6及S)。
- 此內建的指令檔會自動在重開機後啟動服務,但先決條件是重開機之前要先啟動服務。
Subscribe to:
Posts (Atom)