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如下:
<?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,点击管理系统>用户管理,点击设置选项,认证方式选择
,认证地址选择刚刚创建的认证servlet,这里以tomcat服务器为例,则认证地址为:http://localhost:8080/WebReport/TestSave ,如下图:注:Http认证选项也不需要密码一项,因此在手动添加用户或者同步数据集导入用户时,都没有密码一项。
3.3登录测试
当用户名和密码相等时,登录成功;当用户名和密码不相等时,登录失败,这里的用户名需是用户管理里已经存在的用户
附件列表
文档内容仅供参考,如果你需要获取更多帮助,付费/准付费客户请咨询帆软技术支持
关于技术问题,您还可以前往帆软社区,点击顶部搜索框旁边的提问按钮
若您还有其他非技术类问题,可以联系帆软传说哥(qq:1745114201)