历史版本11 :HTTP 认证 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 描述编辑

对于ERP、OA、CRM、.NET等软件或项目中,其本身是有一个统一的认证体系,报表只作为一个模块集成到这些系统中。

用户的权限信息是保存在自己的服务器上,且不适合直接开放给finereport服务器,即不需再报表服务端进行认证,用户登陆系统平台后访问报表模块,是直接在其统一的认证体系中认证,而最终返回用户的角色信息至报表服务端,从而控制报表的访问权限,此时就可以使用HTTP认证服务配置。以下讲解此认证配置。

2. 实现原理编辑

将用户名fr_username和密码fr_password传递给了报表服务,报表服务将带着这两个参数访问认证地址(为了保证安全性,使用post方式)。
如果返回的结果是false,即身份认证失败,此时将会返回登陆界面,否则以返回的结果作为该用户的角色保存在session中(多个角色以逗号隔开)。
注:下面步骤里只支持servlet,不支持通过jsp实现

3. 实现步骤编辑

3.1 编写验证页面
(1)验证页面机制
在进行登陆时,会将用户名fr_username和密码fr_password传递给报表服务,报表服务将带着这两个参数访问认证地址。如果返回的结果是false,则身份认证失败并提示用户名或密码错误,否则以返回的结果作为该用户的角色保存在session中。
(2)示例
如下我们用代码实现验证用户名密码是否相等,若相同则将返回的用户名识别为角色并复制给fr_authority保存在session中,若不相同则认证失败,具体的代码如下:
String username = request.getParameter("fr_username"); String password = request.getParameter("fr_password"); if (username.equals(password) ) { response.getWriter().write(username); } else { response.getWriter().write("false"); }
注:fr_username、fr_password、fr_authority是我们报表默认的参数,所以调用时大小写必须保持一致。
另:如上方法只是验证用户名和密码是否相等并将用户名为角色返回,您也可以自己设置认证方法。
完整代码如下:
package com.fr.web; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; /** * Servlet implementation class for Servlet: TestSave * */ public class TestSave extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet { public TestSave() { super(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("fr_username"); String password = request.getParameter("fr_password"); if (username.equals(password) ) { response.getWriter().write(username); } else { response.getWriter().write("false"); } } /* (non-Java-doc) * @see javax.servlet.http.HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
将编译生成的class文件放到WebReport\WEB-INF\classes\com\fr\web下,同时在WebReport\WEB-INF\web.xml下新增servlet, 修改后的web.xml如下:

222

<?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> <servlet> <servlet-name>ReportServer</servlet-name> <servlet-class>com.fr.web.ReportServlet</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet> <servlet-name>TestSave</servlet-name> <servlet-class>com.fr.web.TestSave</servlet-class> <load-on-startup>0</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ReportServer</servlet-name> <url-pattern>/ReportServer</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>TestSave</servlet-name> <url-pattern>/TestSave</url-pattern> </servlet-mapping> </web-app>
3.2 HTTP认证配置设置
在浏览器地址栏中输入http://localhost:8075/WebReport/ReportServer?op=fs,点击管理系统>用户管理,点击设置选项,认证方式选择Http认证,认证地址选择刚刚创建的认证servlet,则认证地址为:http://192.168.101.242:8075/WebReport/TestSave ,如下图:

222

注:Http认证选项也不需要密码一项,因此在手动添加用户或者同步数据集导入用户时,都没有密码一项。


3.3登录测试

当用户名和密码相等时,登录成功;当用户名和密码不相等时,登录失败,这里的用户名需是用户管理里已经存在的用户