星期二, 12月 24, 2013

CAS Client for .NET renew="true"

過去不算短的一段時間,一直都是在本機 IIS Express 開兩個埠模擬兩個不同的網站,它們都裝上 CAS Client for .NET 來測試單一簽入,好像沒問題?今天深究為何 renew 的值不論怎麼設的效果都一樣之下,才大吃一驚:由於兩個網站都在 localhost,所以根本就共享 Cookie!

為了要確認此參數有效,整個測試環境大修:
  1. CAS Server 必須安裝憑證。
  2. 瀏覽器所在電腦必須信任該憑證,各網站以 https 連入 CAS Server。
  3. 即使兩個網站都在本機,也要設 C:\Windows\system32\drivers\etc\hosts 給它們不同的主機名稱,例如 www.ap1.com 與 www.ap2.com。
  4. 登入後,利用瀏覽器不同的頁籤訪問 renew="false" 的網站,可正常使用;但若設定 renew="true" 的網站,則必須重新登入。

星期一, 12月 09, 2013

如何確認 PreparedStatement 有在 Oracle 被執行到?

假設程式如下:

String s = "Select COUNT(*) From TABLE1 Where ID = ?";
PreparedStatement p = connection.prepareStatement(s);
Object o = (Object)"id";
p.setObject(1, o);
ResultSet r = p.executeQuery();

可以藉由 Oracle SQL Developer 執行以下的查詢(在程式執行前後各一次):

Select FETCHES From V$SQL Where SQL_TEXT = 'Select COUNT(*) From TABLE1 Where ID = :1';

如果控制在很短的時間內,第二次的結果比前次多一,則幾乎可以確定這個敘述有被執行到。其中 V$SQL 或是 V$SQLAREA 是一個內建的統計用 View,FETCHES 是這個 View 的一個欄位,SQL_TEXT 是 SQL Statement,「:1」表示查詢語句的第一個變數。