天天看點

CentOS 下的驗證碼顯示問題

CentOS 下的驗證碼顯示問題

 開發環境 AND 生産環境.gif

問題:

項目部署到 CentOS 的伺服器後,圖檔驗證碼請求時出現 500 錯誤,

CentOS 下的驗證碼顯示問題

日志一直是 ArrayIndexOfBoundsException:0,數組第 0 位越界,錯誤定位到了代碼 123 行,

驗證碼使用 java.awt.Graphics 來生成的,在 123 行的地方調用了 java.awt.Graphics 類的 drawString 方法(方法的作用是将指定的文本繪制為圖檔),

實在找不出問題,便認為是 java.awt.Graphics 的問題,于是換谷歌的 Kaptcha 來生成驗證碼。

使用 Kaptcha 來生成圖檔驗證碼,本地環境測試沒有問題,部署到伺服器後也沒有報錯,但是驗證碼圖檔上隻有幹擾線,驗證碼文本并未繪制出來。

回過頭想想使用 Graphics 來生成驗證碼時也是在繪制文本的時候出了問題,然後科普了一下 Kaptcha 在繪制文本時預設使用的字型是 Arial, Courier 這兩種。

去 CentOS 存儲字型的路徑 /usr/share/fonts/ 去檢視,果然沒有 Arial 和 Courier 的字型,隻有一個 stix 的字型目錄,這樣的話我們給它添加上這兩種字型其中一種就可以了。

解決:

給伺服器添加需要的字型即可。

1. 打開自己環境電腦上的本地目錄:C:\Windows\Fonts,找到 Arial 或 Courier 字型,将他們上傳到 CentOS 伺服器中的 /usr/share/fonts/ 目錄下,

這個目錄下需要自己為字型建立一個目錄,比如我要上傳 Arial 的字型,需要先在 /usr/share/fonts/ 下建立一個 arial 的目錄,然後将 arial 的字型檔案放進去。

2. 執行以下指令将剛剛添加的字型設定緩存使其生效

[root@localhost ~]# cd /usr/share/fonts/arial
[root@localhost ~]# mkfontscale
[root@localhost ~]# mkfontdir
[root@localhost ~]# fc-cache -fv
      

3. 修改 bashrc檔案,設定 gunplot 對 arial 的選擇路徑

# 先打開這個檔案
vi ~/.bashrc

# 檔案末尾追加這兩句,第一句是我們安裝的字型的路徑
export GDFONTPATH=/usr/share/fonts/arial
export GNUPLOT_DEFAULT_GDFONT="arial"