2015年10月30日 星期五

在 Apache HttpClient 4.5 版忽略 HTTPS 認證

一般 HTTPS 連線會驗證包括證書本身以及像是 host name 等資訊
不過在測試階段時,有時會因為證書是用自我驗證來產生的,導致程式碼無法正常運作
HttpClient 有設定方法可以忽略這些認證資訊~
不過在 HttpClient 4.3 版以後,陸續有些類別和方法都被廢棄了
以下是在 HttpClient 4.5 版的設定方法。

2015年10月29日 星期四

使用 logback 時,在 Jetty 上忽略 Jetty 產生的 log

在部署專案時,嘗試了使用 slf4j + logback
不過部署到 Jetty 上就發現 Jetty 瘋狂地印出 Jetty 自己運行時的 debug log
變成要在 log 海中找到自己的 application log 非常花時間。

2015年10月20日 星期二

HTTP 基本驗證

HTTP 協定中有定義了基本的驗證方法,可以讓瀏覽器直接用明文方式傳輸驗證資訊。

從伺服器端的角度來說,伺服器在接收到 request 時,是去檢查是否有帶驗證資訊(Authorization 這個標頭)進來
沒有的話,伺服器會回應 HTTP Status Code 401
並且在標頭中加上 WWW-Authenticate: Basic realm="Secure Area" 的資訊
其中 "Secure Area" 是表示伺服器名稱,讓瀏覽器可以顯示在介面上提示使用者的。

如果 request 中已經有 Authorization 這個標頭,伺服器可以用 Base64 編碼去解開內容
裡面的資訊會以 : 的格式存放。

參考資料:
  1. HTTP基本認證

2015年10月19日 星期一

Jetty 的 ClassLoader 與模組設定

這篇記錄的標題有點難定...目的是想用來記錄這幾天遇到的 ClassNotFound 問題。

我的環境原先是在 {$JETTY_HOME}/lib 裡面建立一個資料夾 {$JETTY_HOME}/lib/{PROJECT_NAME},放我的專案要用的函式庫(都是開源的函式庫)
運作時看起來都蠻好的,但後來遇到需要引用另一個我們自己寫的 jar
這時問題就出現了,我把 jar 一樣丟進 {$JETTY_HOME}/lib 資料夾裡,卻一直跑出 ClassNotFoundException 的錯誤。

2015年10月14日 星期三

使用 Jersey client 送出 HTTP 要求

一般來說,要用 Java 送出 HTTP 要求時,大多直覺會想到的都是 Apache HttpClient 吧
不過在我們的環境中,遇到了一點奇妙的需求,Apache 的套件有點不合用
剛好又發現有網友提到,Jersey 本身就有提供 Jersey client 可以作為送出 HTTP 的方法
而且我們本來就用 Jersey 來提供 RESTful 介面,不需要另外引用函式庫,所以就拿來試試看了。

2015年10月5日 星期一

在 Jetty 9 上使用 Logger

從 Tomcat 改用 Jetty 以後,第一個遇到的問題就是,以前用的 Log4j 好像沒有反應了。
查了一下,Jetty 好像預設使用 slf4j(如果 classpath 中存在 slf4j 的話)[1]
所以似乎比較建議使用 slf4j 作為 Logger。

Jetty 9 設定

有關如何設定 Jetty,可以參考 [1] 的官方文件
Jetty 的設定檔主要是放在 ./etc 目錄裡的 XML
關於 HTTP 的設定可以編輯 jetty-http.xml~。
例如想要變更預設的 port 的話,可以編輯 jetty-http.xml 中的這行:
<Set name="port"><Property name="jetty.http.port" deprecated="jetty.port" default="8080" /></Set>

參考資料:
  1. Chapter 6. Configuring Jetty Connectors

2015年10月1日 星期四

在 Ubuntu 14.04 安裝 OpenJDK 8

add-apt-repository ppa:openjdk-r/ppa
apt-get update
apt-get install openjdk-8-jre