反饋已提交
網絡繁忙
CAS版本:3.5.2。
用戶需要實現通過 CAS 認證登錄數據決策系統,本文將介紹如何將 FineReport 與 CAS 單點登入結合。
配置證書是單點登入認證系統中很重要的一項工作,客戶端與伺服器的互動安全靠的就是證書;本教程由於是演示所以就自己用 JDK 自帶的 keytool 工具生成證書;如果以後真正在產品環境中使用,需要透過證書提供商進行購買,證書認證一般都是由 VeriSign、GlobalSign 等國際公認的 CA 機構認證。
下面介紹在 Windows 系統中一種利用自帶工具生成 SSL 證書及在 Tomcat 伺服器中配置的方法。
首先需要安裝 JRE,然後執行 cmd 或者 Windows Powershell,右鍵以管理員身份執行,按確定啟動命令提示视元。輸入cd D:\java\jdk1.8.0_271\jre\bin進入 JRE 的 bin 目錄下,執行命令:keytool -genkey -alias tomcat-servers -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore。
注:該 JRE 是配置 Tomcat 時所用的 JRE。
若需要遷移到行業標準格式 PKCS12,執行命令:keytool -importkeystore -srckeystore server.keystore -destkeystore server.keystore -deststoretype pkcs12。
輸入金鑰庫口令:changeit。
注:您的名字與姓氏,這裡不能輸入 IP 地址,只能輸入域名。
注:您的名字與姓氏,本例輸入的是 roxy,其實這個域名是不存在的,但是這裡為了演示所以用了這個虛擬域名,所以需要在 hosts 檔案裡對映一個虛擬域名,設定方式如下圖所示:
這樣在訪問 roxy 的時候其實是訪問的是 127.0.0.1,也就是本機。
匯出證書,執行命令:keytool -export -alias tomcat-servers -storepass changeit -file server.cer -keystore server.keystore。
執行命令:keytool -import -trustcacerts -alias servers -file server.cer -keystore cacerts -storepass changeit。
系統詢問是否信任此證書,回答 y ,如下圖所示。
進入%JRE_HOME%\bin目錄下,將新生成的 server.keystore,server.cer,cacerts 複製到 Tomcat 安裝目錄%TOMCAT_HOME%下,如下圖所示。
把%JRE_HOME%\bin目錄下 cacerts 檔案覆蓋到 JRE 的 security 目錄下%JRE_HOME%\lib\security,如下圖所示。
配置 server.xml 檔案,以管理員身份執行文字編輯器,打开%TOMCAT_HOME%\conf\server.xml。查詢 SSL 配置新增證書的地址keystoreFile以及密碼keystorePass,如下圖所示:
注:地址可以填絕對路徑或者在 Tomcat 中的相對路徑。
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true" keystoreFile="D:\apache-tomcat-8.5.57\server.keystore" keystorePass="changeit"/>。
重啟 Tomcat ,訪問https://roxy:8443/,點選【繼續前往roxy】,如下圖所示。
如果看到圖下面的介面,說明 Tomcat 的 SSL 配置成功。
如果配置完後啟動不了 Tomcat 服務,則說明將證書應用到Web伺服器的配置未成功,仔細檢查是否按上述步驟配置。
若訪問連結提示【此網站的安全證書存在問題】,是由於使用 Java 生成的證書使用 https 訪問時會提示證書有風險,可以申請一個阿里云云盾的免費證書。
下載 CAS :CAS 。
解壓下載的 cas-server-3.5.2-release.zip,在 %CAS%\modules資料夾中找到cas-server-webapp-3.5.2.war ,將其重新命名為 cas.war,如下圖所示。
將 cas.war 複製到%TOMCAT_HOME%\webapps資料夾下,啟動 Tomcat,就會看到Tomcat 自動將cas.war 解壓到 cas 資料夾中。如下圖所示。
在預設配置下,CAS 認為只要使用者名稱密碼相同即登入成功。
注:可以透過修改配置以實現基於資料庫的身份驗證,目前先以預設配置進行測試。
在瀏覽器中輸入網址https://localhost:8443/cas/login,也可以使用上一節設定的虛擬域名:https://roxy:8443/cas/login,如果 IE 有證書警告資訊,直接點選【繼續瀏覽此網站(不推薦)】,访问界面如下圖所示。
此處隨便輸一個使用者名稱和密碼,如果使用者名稱與密碼相同,則系統顯示登入成功,如下圖所示。
使用者可以在瀏覽器中輸入網址https://localhost:8443/cas/logout,也可以使用上一節設定的虛擬域名:https://roxy:8443/cas/logout,則系統自動完成登出操作。如下圖所示。
至此,伺服器端配置全部完成。
進行基於資料庫的身份驗證,允許不同使用者都能夠實現登入。
本文以 MySQL 資料庫為例進行操作。
如果使用 mysql 8.0 版本,需要下載 mysql-connector-java-5.1.46.jar(Feb. 2018版本)。如果使用其他資料庫,把對應的資料庫 JDBC 驅動包放到該目錄下即可。
複製 JAR 包 cas-server-support-jdbc-3.5.2.jar和mysql-connector-java-5.1.6-bin.jar至%TOMCAT_HOME%\webapps\cas\WEB-INF\lib目錄下,如下圖所示。
表名 【userinfo】,使用者名稱 【username】,密碼【userpass】,如下图所示。
以管理員身份啟動文字編輯工具,開啟%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml,找到下面的程式碼:
<bean id="authenticationManager"
class="org.jasig.cas.authentication.AuthenticationManagerImpl">。
在該段程式碼前面插入 mysql JDBC 資料來源配置資訊,如下所示:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName"><value>驅動器</value></property>
<property name="url"><value>url</value></property>
<property name="username"><value>資料庫使用者名稱</value></property>
<property name="password"><value>資料庫密碼</value></property>
</bean>。
以管理員身份啟動文字編輯工具,開啟%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml,找到下面的程式碼並將其註釋掉,如下圖所示。:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />。
註:該配置資訊使用 SimpleTestUsernamePasswordAuthenticationHandler 驗證使用者,即預設使用者名稱和密碼相同則驗證透過,使用者名稱密碼不同則登入失敗。我們需要將其替換成基於資料庫驗證的配置資訊。
其下面插入如下程式碼:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select userpass from userinfo where username=?" />
插入配置資訊如下圖所示。
參數
解釋
QueryDatabaseAuthenticationHandler
是 cas-server-support-jdbc 提供的查詢API其中的一個。
QueryDatabaseAuthenticationHandler 是透過配置一個 SQL 語句查出密碼,與所給密碼匹配。
dataSource
是使用 JDBC 查詢時的資料源。
SQL
語句就是查詢哪一張表,本例根據 userinfo 表的 username 欄位查詢密碼,CAS 會匹配使用者輸入的密碼,如果匹配則透過。
保存对%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml所做的修改。
重新啟動 Tomcat 服務。
在瀏覽器中輸入網址https://roxy:8443/cas/login,如果 IE 有證書警告資訊,直接點選【繼續瀏覽此網站(不推薦)】,CAS 會匹配使用者輸入的使用者名稱密碼,和userinfo 表的使用者名稱密碼,如下圖所示。
CAS 會匹配使用者輸入的使用者名稱密碼,和 userinfo 表的使用者名稱密碼,如果匹配則透過則系統顯示【登入成功】,如下圖所示。
下面將介紹如何將 FineReport 與 CAS 單點登入結合。
將 CAS 的casclient.jar和cas-client-core-3.2.1.jarJAR 包以及%Java_HOME%\jdk\lib\tools.jar都複製到%TOMCAT_HOME%\webapps\webroot\WEB-INF\lib下,如下圖所示。
在%TOMCAT_HOME%\webapps\webroot\WEB-INF目錄下新建web.xml 文件,插入程式碼。
其中 roxy 為配置的虛擬域名,請按照實際情況進行修改,如下圖所示。
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <display-name>Template WebApp</display-name> <mime-mapping> <extension>msi</extension> <mime-type>application/x-msi</mime-type> </mime-mapping> <filter> <filter-name>CASFilter</filter-name> <filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name> <param-value>https://alex:8443/cas/login</param-value> <!--cas提供登錄頁面的url--> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://alex:8443/cas/proxyValidate</param-value> <!--cas提供service ticker或者proxy ticket驗證服務的url--> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>alex:8443</param-value> <!--客戶端應用的域名和端口--> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/decision/*</url-pattern> </filter-mapping> <filter> <filter-name>FrFilter</filter-name> <filter-class>com.fr.FrFilter</filter-class> </filter> <filter-mapping> <filter-name>FrFilter</filter-name> <url-pattern>/decision/*</url-pattern> </filter-mapping> </web-app>
Java 程式碼見超連結:FrFilter.java。
將 FrFilter.java 編譯成 class 檔案:FrFilter.class 并放在%TOMCAT_HOME%\webroot\WEB-INF\classes\com\fr目錄下,如下圖所示。
啟動 Tomcat 伺服器,在瀏覽器中輸入:https://localhost:8443/webroot/decision即進入了 CAS 登入介面,輸入使用者名稱和密碼即可跳轉到決策平臺對應的使用者介面下,如下圖所示。
視頻中的域名為之前配置的 SSL 證書時所設置的。
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉