java中的Crystal Report DB身份验证
我在Eclipse的Crystal Report中遇到了一个问题 我使用servlet通过将查看器对象写入响应来呈现crystal report viewer,如下所示:java中的Crystal Report DB身份验证,java,jdbc,crystal-reports,login,Java,Jdbc,Crystal Reports,Login,我在Eclipse的Crystal Report中遇到了一个问题 我使用servlet通过将查看器对象写入响应来呈现crystal report viewer,如下所示: public class ReportViewer extends HttpServlet { @SuppressWarnings("deprecation") public void doGet(HttpServletRequest request, HttpServletResponse response
public class ReportViewer extends HttpServlet {
@SuppressWarnings("deprecation")
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
try {
String reportName = "WEB-INF/includes/reports/"+request.getParameter("ReportName");
ReportClientDocument clientDoc = (ReportClientDocument) request.getSession().getAttribute(reportName);
if (clientDoc == null) {
// Report can be opened from the relative location specified in the CRConfig.xml, or the report location
// tag can be removed to open the reports as Java resources or using an absolute path
// (absolute path not recommended for Web applications).
clientDoc = new ReportClientDocument();
// Open report
clientDoc.open(reportName, OpenReportOptions._discardSavedData);
// Store the report document in session
ConnectionInfo info = new ConnectionInfo();
info.setUserName("sa");
info.setPassword("sa");
Tables t = clientDoc.getDatabaseController().getDatabase().getTables();
for (com.crystaldecisions.sdk.occa.report.data.ITable table : t) {
IConnectionInfo Ic = table.getConnectionInfo();
Ic.setPassword("sa");
Ic.setUserName("sa");
table.setConnectionInfo(Ic);
}
request.getSession().setAttribute(reportName, clientDoc);
}
// Create the CrystalReportViewer object
CrystalReportViewer crystalReportPageViewer = new CrystalReportViewer();
// set the reportsource property of the viewer
IReportSource reportSource = clientDoc.getReportSource();
crystalReportPageViewer.setReportSource(reportSource);
// set viewer attributes
crystalReportPageViewer.setOwnPage(true);
crystalReportPageViewer.setOwnForm(true);
// Apply the viewer preference attributes
// Process the report
crystalReportPageViewer.processHttpRequest(request, response, request.getSession(false).getServletContext(), null);
} catch (ReportSDKExceptionBase e) {
System.out.println(e);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
当我试图请求这个servlet时,它会将我重定向到jdbc登录页面,然后返回到这个servlet。我需要通过在某处硬编码来避免jdbc登录。请帮助我,每一条评论都将不胜感激。您是否在上查看了wiki 这里有一个JSP示例,您可以使用:
<%@ page import="com.crystaldecisions.sdk.occa.report.application.OpenReportOptions,
com.crystaldecisions.sdk.occa.report.application.ReportClientDocument,
com.crystaldecisions.sdk.occa.report.exportoptions.ReportExportFormat,
java.io.ByteArrayInputStream,
java.util.Calendar"
%><%
String reportPath;
String db_username;
String db_password;
ReportClientDocument reportClientDocument;
ByteArrayInputStream byteArrayInputStream;
byte[] byteArray;
int bytesRead;
reportPath = request.getParameter("report_path");
db_username = request.getParameter("db_username");
db_password = request.getParameter("db_password");
/*
* Instantiate ReportClientDocument and specify the Java Print Engine as the report processor.
* Open a rpt file.
*/
reportClientDocument = new ReportClientDocument();
reportClientDocument.setReportAppServer(ReportClientDocument.inprocConnectionString);
reportClientDocument.open(reportPath, OpenReportOptions._openAsReadOnly);
/*
* Set the database logon for all connections in main report.
*/
reportClientDocument.getDatabaseController().logon(db_username, db_password);
/*
* Retrieve PDF format of report and stream out to web browser.
*/
byteArrayInputStream = (ByteArrayInputStream) reportClientDocument
.getPrintOutputController().export(ReportExportFormat.PDF);
response.reset();
response.setHeader("Content-disposition", "inline;filename=crreport.pdf");
response.setContentType("application/pdf");
byteArray = new byte[1024];
while((bytesRead = byteArrayInputStream.read(byteArray)) != -1) {
response.getOutputStream().write(byteArray, 0, bytesRead);
}
response.getOutputStream().flush();
response.getOutputStream().close();
reportClientDocument.close();
%>
我知道这很晚了,但我必须维护其中一个旧代码的代码。如果可以的话,请帮助我<代码>reportClientDocument.getDatabaseController().logon(db\u用户名,db\u密码)代码>。我在这里提供的凭据并不重要,在浏览器中查看报告时,报告会要求提供凭据。它表示需要额外的信息,并要求提供数据库的用户名和密码。当我输入用户名和密码时,它就工作了。如何添加避免在浏览器中为查看器输入用户名和密码。我花了一天的时间在这方面,谷歌并没有真正得到帮助