CentOS 下的驗證碼顯示問題

 

開發環境 AND 生產環境.gif

 

問題:

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

日誌一直是 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"