从其他项目调用java servlet [重复]

Posted

技术标签:

【中文标题】从其他项目调用java servlet [重复]【英文标题】:Call java servlet from other project [duplicate] 【发布时间】:2018-08-22 21:08:25 【问题描述】:

我有一个 Java Web 项目(演示 1)在 Apache Tomcat 版本 8.0.33 上运行,该版本安装在 Ubuntu 14.04 服务器上。

现在我正在创建一个新的 Java Web 项目(演示 2),我必须从我的项目(演示 2)中调用一个带有我已经运行的项目(演示 1)的请求参数的 Servlet(doPost)。

我的 Java Web 项目(演示 1)正在 https 上运行 所以 Servlet URL 是https://shibbolethidp.demo.local/idp/j_security_check

我还使用以下命令将证书导出到运行 Demo 1 应用程序的服务器到我试图运行我的 Demo 2 应用程序的本地 jdk 中。

C:\Program Files\Java\jdk1.8.0_60\bin\keytool.exe -import -alias shib-idp -file C:\Users\guest\Desktop\Desktop\shib_exportedCert.der -keystore "C:\Program Files\Java\jdk1.8.0_60\jre\lib\security\cacerts" -storepass changeit

下面给出了我的 Demo 2 项目代码,我用它来调用 Demo 1 项目的 Servlet

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;

@SuppressWarnings("serial")
public class Authn extends HttpServlet 
    Logger log = Logger.getLogger(Authn.class.getName());

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
        try 
            URL url = new URL("https://shibbolethidp.demo.local/idp/j_security_check");
            URLConnection conn = url.openConnection();
            conn.setDoOutput(true);
            BufferedWriter out = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream()));
            out.write("xml=xmltest\r\n");
            out.flush();
            out.close();
            BufferedReader in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            String response1;
            while ((response1 = in.readLine()) != null) 
                System.out.println(response1);
            
            in.close();
         catch (Exception e) 
        
    

但是当我运行它时,我得到了以下错误

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching shibbolethidp.demo.local found

我正在使用 jdk1.8.0_60 和 Tomcat 8。

【问题讨论】:

由于您使用的是 SSL (https),​​因此您遇到了证书问题。 @AxelH 我已经将运行 Demo 1 应用程序的服务器的证书导出到我试图运行我的 Demo 2 应用程序的本地 jdk 中。 【参考方案1】:

您可以为您的 localhost 开发环境使用传输安全 (SSL) 解决方法。

尝试添加这个:

public class Authn extends HttpServlet 
    Logger log = Logger.getLogger(Authn.class.getName());

    static 
        //for localhost testing only
        javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
        new javax.net.ssl.HostnameVerifier()

            public boolean verify(String hostname,
                    javax.net.ssl.SSLSession sslSession) 
                if (hostname.equals("localhost")) 
                    return true;
                
                return false;
            
        );
    

    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
      // your code here
    

【讨论】:

以上是关于从其他项目调用java servlet [重复]的主要内容,如果未能解决你的问题,请参考以下文章

无法从 jsp 调用 servlet 文件 - 发现 404 错误 [重复]

Java Servlet捕获所有Web请求然后调用JSP页面[重复]

无法在jsp页面中调用servlet的doPost()方法[重复]

带有 JDBC 的 JSF 项目,我无法在 Servlet 上调用 DAO [重复]

从 Java GUI 应用程序调用 servlet?

将对象从 servlet 传递到另一个 java [重复]