历史版本16 :配置FineReport作为CAS客户端 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

制作完上述步骤后,下面我们来看下如何将FR与CAS单点登录结合。

2. 实现过程编辑

2.1 拷贝jar
将cas两个client-jar包拷贝到%TOMCAT_HOME%\webapps\WebReport\WEB-INF\lib下,如下图:

222

2.2 修改web.xml
首先打开%TOMCAT_HOME%\webapps\WebReport\WEB-INF下的web.xml文件,在其中加入如下过滤条件:
<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://susie:8443/cas/login</param-value> <!--这里的server是服务端的IP--> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name> <param-value>https://susie:8443/cas/proxyValidate</param-value> <!--这里的ServerName是服务端的主机名也就是CN--> </init-param> <init-param> <param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name> <param-value>localhost:8443</param-value> </init-param> </filter> <filter-mapping> <filter-name>CASFilter</filter-name> <url-pattern>/ReportServer</url-pattern> </filter-mapping>
若报表应用设置了权限,则需要将如下代码:


package com.fr;

import com.fr.fs.base.entity.User;
import com.fr.fs.base.entity.UserInfo;
import com.fr.fs.control.UserControl;
import com.fr.fs.privilege.base.FServicePrivilegeLoader;
import com.fr.fs.privilege.entity.DaoFSAuthentication;
import com.fr.general.ComparatorUtils;
import com.fr.privilege.PrivilegeManager;
import com.fr.privilege.PrivilegeManagerProvider;
import com.fr.privilege.session.PrivilegeInfoSessionMananger;
import org.jasig.cas.client.util.AssertionHolder;

import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

public class filter implements Filter {
    public filter() {
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest re = (HttpServletRequest)req;
        HttpServletResponse resp = (HttpServletResponse)res;
        HttpSession session = re.getSession(true);
        boolean hasFSAuth = session.getAttribute("fr_fs_auth_key") != null;
        String username;
        if(!hasFSAuth) {
            username = AssertionHolder.getAssertion().getPrincipal().getName();

            try {
                User e = UserControl.getInstance().getByUserName(username);
                if(e == null) {
                    resp.sendRedirect("http://xxx/cas-webapp-server/login?");
                }

                DaoFSAuthentication authentication = new DaoFSAuthentication(new UserInfo(e.getId(), username, username));
                PrivilegeManagerProvider pm = PrivilegeManager.getProviderInstance();
                if(ComparatorUtils.equals(username, pm.getRootManagerName())) {
                    authentication.setRoot(true);
                }

                long userid = authentication.getUserInfo().getId();
                PrivilegeInfoSessionMananger.login(new FServicePrivilegeLoader(username, UserControl.getInstance().getAllSRoleNames(userid), UserControl.getInstance().getUserDP(userid)), session, resp);
                session.setAttribute("fr_fs_auth_key", authentication);
                UserControl.getInstance().login(userid);
            } catch (Exception var14) {
                var14.printStackTrace();
            }
        }

        filterChain.doFilter(req, res);
    }

    public void init(FilterConfig filterconfig) throws ServletException {
    }

    public void destroy() {
    }
}

FrFilter.java编译成class文件,并放在%TOMCAT_HOME%\WebReport\WEB-INF\classes\com\fr目录下。
然后在web.xml文件中增加如下代码:
<filter> <filter-name>FrFilter</filter-name> <filter-class>com.fr.FrFilter</filter-class> </filter> <filter-mapping> <filter-name>FrFilter</filter-name> <url-pattern>/ReportServer</url-pattern> </filter-mapping>


222

2.3 测试

最后启动tomcat服务器,在浏览器中输入:https://localhost:8443/WebReport/ReportServer?op=fs即进入了cas登录界面,通过cas认证后,FRFilter会看用户名是否在fs的用户中,如果在,则登录成功,否则登录失败跳转hao123,如下图:

222