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

目录:

1. 概述编辑

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

2. 实现过程编辑

首先打开%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.base.FRContext; 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.auth.FSAuthentication; import com.fr.fs.privilege.base.FServicePrivilegeLoader; import com.fr.fs.privilege.entity.DaoFSAuthentication; import com.fr.general.FRLogger; import com.fr.privilege.session.PrivilegeInfoSessionMananger; import java.io.IOException; import java.io.PrintStream; 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 org.jasig.cas.client.authentication.AttributePrincipal; import org.jasig.cas.client.validation.Assertion; public class FrFilter implements 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); String username = ""; String userpass = ""; Object object = re.getSession().getAttribute("_const_cas_assertion_"); if (object != null) { Assertion assertion = (Assertion)object; username = assertion.getPrincipal().getName(); } else { username = (String)session.getAttribute("edu.yale.its.tp.cas.client.filter.user"); if ((username == null) || ("".equals(username))) resp.sendRedirect("http://www.baidu.com"); } try { User user1 = UserControl.getInstance().getByUserName(username); if (user1 != null) { userpass = user1.getPassword(); System.out.println(userpass); FSAuthentication authentication = new DaoFSAuthentication(new UserInfo(user1.getId(), user1.getUsername(), user1.getPassword())); 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); System.out.println("fr FrFilter is over with username is -" + username + "- and userpass is -" + userpass + "-"); FRContext.getLogger().info("fr FrFilter is over with username is ###" + username + "### and userpass is ###" + userpass + "###"); filterChain.doFilter(req, res); } else { resp.sendRedirect("http://www.hao123.com"); } } catch (Exception e) { e.printStackTrace(); } } 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>

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


222