Skip to content

Настройка FineBI в качестве клиента CAS - Справка FineReport | Разработка отчетов | Отчеты | Учебные пособия

Настройка FineBI в качестве клиента CAS

1. Обзор

В этой статье описывается, как настроить FineBI в качестве клиента CAS.

1.1 Экологические инспекции

Перед настройкой FineBI необходимо настроить среду следующим образом:

(1) Настройка сервера CAS, если у пользователя уже есть среда CAS, эту операцию можно проигнорировать.

2) Настройте SSL-сертификат для доступа по протоколу HTTPS.

3) Реализовать аутентификацию на основе базы данных, которую можно игнорировать, если пользователю не нужно использовать информацию в базе данных для аутентификации при входе в систему.

1.2 Принципы работы

В процессе однократной регистрации в CAS, FineBI настраивается в соответствии с основными функциями, выполняемыми клиентом.

1) Когда пользователь обращается к системе FineBI, запрос перенаправляется на сервер CAS.

2) Проверить подлинность билета на сервере CAS, узнать, истек ли срок его действия и другую информацию.

(3) Получите имя пользователя, полученное в результате аутентификации CAS, и сравните его с именем пользователя в FineBI. Если сравнение совпадает и пользователь доступен, единый вход будет успешным.

Процесс аутентификации при входе в систему показан на следующем рисунке:

2. Операционные шаги

2.1 Копирование проекта BI

Скопируйте файл webroot в каталоге %FineBI%/webapps в %Tomcat_HOME%/webapps.

Примечание: Имя BI-проекта webroot можно настроить, но следует учитывать, что доступ к BI-проекту в дальнейшем будет осуществляться по адресу http://ip:端口/工程名/decision中的工程名也要随之更改.

1576487101509101.png

2.2 Скопируйте пакет JAR

Скопируйте JAR-пакеты CAS casclient.jar и cas-client-core-3.2.1.jar, а также %Java_HOME%/jdk/lib/tools.jar в %TOMCAT_HOME%/webapps/webroot/WEB-INF/lib. INF/lib, как показано ниже:

3.png

2.3 Добавление файла web.xml

Файл web.xml используется для реализации следующих функций:

  • Когда пользователь обращается к системе FineBI, запрос перенаправляется на сервер CAS.
  • Проверьте подлинность билета на сервере CAS, независимо от того, истек срок его действия или нет.

Создайте новый файл web.xml в каталоге %TOMCAT_HOME%webapps/webroot/WEB-INF и вставьте в него код, как показано ниже:

<?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> <mime-mapping>.   
   
 <Фильтр> <имя фильтра>   
 CASFilter</filter-name> <filter-class>edu.yale.its.tp.cas.   
 client.filter.CASFilter</filter-class> <init-param> &   
 nbsp; <param-name>edu.yale.its.tp.cas.client.filter.   
 loginUrl</param-name> <param-value>   
 https://roxy:8443/cas/login</param-value> &nbsp ;<!   
   
 --cas предоставляет url страницы входа в систему --> </init-param>   
 <init-param> &   
 nbsp; <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> &   
 nbsp; <param-value>https://roxy:8443/cas/proxyValidate</param-value> & nbsp; <!   
 --cas предоставляет url для сервиса проверки тикеров или прокси-билетов --> </init-   
   
 param> <init-param> & nbsp; <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> &   
 nbsp; <param-value>roxy:8443</param-value>&nbsp.   
; & nbsp; <!   
   
 -домен и порт клиентского приложения--> </init-param> &   
   
 nbsp;</filter> <filter-mapping> &   
 nbsp; <filter-name>CASFilter</filter-name> <url-   
   
 pattern>/decision/*</url-pattern> </filter-mapping> <filter>&   
   
 nbsp; <filter-name>FrFilter</filter-name>   
<filter-class>com.fr.FrFilter</filter-class> </filter> &nbsp   
   
; <filter-mapping> <filter-name>FrFilter</filter-name>   
   
<url-pattern>/decision/*</url-pattern> </filter-mapping&   
 gt; </web-app>

roxy - это доменное имя вашей персональной конфигурации, пожалуйста, измените его в соответствии с вашими личными настройками, как показано на следующем рисунке:

5.png

2.4 Создание нового файла Java

Fr.Filter используется для получения имени пользователя, возвращаемого при аутентификации в CAS, и сравнения его с именем пользователя в FineBI, чтобы определить, является ли он пользователем системы FineBI.

1) Создайте новый Java-файл с именем FrFilter.java. Полный код Java показан ниже:

Код Java смотрите по ссылке: FrFilter.java

  
  
  
package com.fr; import com.fr.data.NetworkHelper; import com.fr.decision.mobile.terminal.TerminalHandler; import  
  
com.fr.decision.webservice.utils.DecisionServiceConstants; import com.fr.decision.webservice.v10.login.LoginService; import&  
  
  
nbsp;com.fr.general.ComparatorUtils; import com.fr.log.FineLoggerFactory; import com.fr.security.JwtUtils; import com.  
  
  
fr.stable.StringUtils; import com.fr.stable.web.Device; import org.jasig.cas.client.validation.Assertion; import javax  
  
  
.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.  
  
  
ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http  
  
  
.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java  
  
  
  
.io.IOException; /** * Created by Zed on 2018/9/11. */ public class FrFilter  
  
  
 implements Filter { public FrFilter() { } &nbsp  
;@Override public void init(FilterConfig filterConfig) throws ServletException&  
  
  
 nbsp;{ } @Override public void doFilter( ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws&nbsp  
;IOException, ServletException { FineLoggerFactory.getLogger().info(&quot  
;fr cas login"); HttpServletRequest req = (  
 HttpServletRequest) servletRequest; HttpServletResponse res = (  
 HttpServletResponse) servletResponse; HttpSession session = req  
.getSession(true); FineLoggerFactory.getLogger().info("URL:" +  
  
 req.getRequestURI()); String username; &  
 nbsp; //получаем имя пользователя, переданное cas Object object = req.getSession().  
 getAttribute("_const_cas_assertion_"); if (object !  
 = null) { Assertion assertion = (  
 Assertion) object; имя пользователя = assertion.  
  
 getPrincipal().getName(); } else { & nbsp; имя пользователя = (String) session.getAttribute("edu.yale.its.tp.cas.client.filter  
  
  
.user"); } try { &  
 nbsp; //Имя пользователя пустое, есть проблема с запросом на вход, прямо сообщаем об ошибке &  
 nbsp; if (StringUtils.isNotEmpty(username)) { &  
 nbsp; FineLoggerFactory.getLogger().info("username:" + username); &  
 nbsp; // Получаем токен, переданный запросом & nbsp; Object oldToken = session.getAttribute  
 (DecisionServiceConstants.FINE_AUTH_TOKEN_NAME); &  
 nbsp; //токен не существует, или срок действия токена истек, перейдите к фоновому методу входа в систему if (oldToken == null || !checkTokenValid(req, (String) oldToken, username))&   
 nbsp;{   
 login(req, res, session, username); &  
 nbsp; filterChain.doFilter(req, res); &nbsp  
; } else { &  
 nbsp; // освобождение &nbsp; filterChain.doFilter(req, res); &nbsp  
 nbsp; filterChain.doFilter(req, res); &nbsp ; FineLoggerFactory.getLogger().info("не нужно&  
  
 quot;); } &  
 nbsp; } else { &nbsp  
; throw new Exception("имя пользователя пустое"); &nbsp; }  
 nbsp; } } catch (Exception  
 e) { FineLoggerFactory.getLogger().error(e.getMessage(  
  
  
  
 ), e); } } /**  
  
 * Фоновый метод входа */ private void login(HttpServletRequest& nbsp;req, HttpServletResponse res, HttpSession session, String username) throws Exception&  
 nbsp;{ String token = LoginService.getInstance().login(req, res  
, username); req.setAttribute(DecisionServiceConstants.FINE_AUTH_TOKEN_NAME,&  
 nbsp;token); FineLoggerFactory.getLogger().info("fr FrFilter is&nbsp  
  
  
;с именем пользователя ###" + имя пользователя); } /** &  
  
 nbsp; * Проверяем, действителен ли токен */ private boolean  
 checkTokenValid(HttpServletRequest req, String token, String currentUserName) { &  
 nbsp; try { // Текущий зарегистрированный пользователь и токен, соответствующий  
 имя пользователя отличаются, необходимо перегенерировать токен if (!ComparatorUtils.equals(  
 currentUserName, JwtUtils.parseJWT(token).getSubject())) { & nbsp; FineLoggerFactory.getLogger().info("имя пользователя изменено:" +  
 currentUserName); return false  
  
; } &  
 nbsp; Device device = NetworkHelper.getDevice(req); &nbsp  
; LoginService.getInstance().loginStatusValid(token, TerminalHandler.getTerminal(req, device)); &nbsp; return true; }  
 nbsp; return true;  
  
 } catch (Exception ignore) { } &  
  
  
 nbsp; return false; } @Override public  
  
 void destroy() { } }

2) Скомпилируйте FrFilter.java и поместите полученный файл FrFilter.class в каталог %TOMCAT_HOME%\webroot\WEB-INF\classes\com\fr, как показано ниже:

Нажмите кнопку скачать и распакуйте, чтобы получить файл FrFilter.class: FrFilter.zip

2.png

3. просмотр результатов

Запустите сервер Tomcat, введите: https: //localhost:8443/webroot/decision即进入了 CAS экран входа в браузер, введите имя пользователя и пароль, чтобы перейти к соответствующему пользовательскому интерфейсу под системой принятия решений данных, как показано ниже: