【问题标题】:Error 403 when accessing java servlet in tomcat root context using POST使用 POST 在 tomcat 根上下文中访问 java servlet 时出现错误 403
【发布时间】:2014-05-22 06:50:36
【问题描述】:

基本上我设置了一个 servlet,您可以简单地发布一些数据,它可以在 localhost 上运行。但是,当它部署到我们 VPS 上的 tomcat 时,您可以在浏览器中查看该页面,但如果我的 java 代码尝试发出 POST 请求 - 我会收到错误 403(禁止)。任何想法为什么会这样,如果是这样,任何帮助将不胜感激! :)

补充细节:

服务器:Tomcat 7 上下文:ROOT(我认为)

堆栈跟踪:

java.io.IOException:服务器返回 HTTP 响应代码:403 用于 URL:http://minemanager.org/auth 在 sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1626) 在 net.stormdev.MTA.SM.http.SimplePostClient.post(SimplePostClient.java:40) 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471) 在 java.util.concurrent.FutureTask.run(FutureTask.java:262) 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 在 java.lang.Thread.run(Thread.java:744)

在 servlet 中,代码是在 localhost 上工作的“doPost”方法中的简单响应:

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // Set response content type
    response.setContentType("text/html");

    // Actual logic goes here.
    PrintWriter out = response.getWriter();
    out.println("<p>Oh dear, you can't access this like this!</p>");
}


protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType("text");
    PrintWriter out = response.getWriter();
    Object accEmail = request.getParameter("accEmail");
    Object accUUID = request.getParameter("accUUID");
    if(accEmail == null || accUUID == null){
        out.println("false"); //Nope, not valid...
        out.flush();
        out.close();
        return;
    }
    String resp = ""+Auths.isValid(accUUID.toString(), accEmail.toString());
    out.println(resp);
    out.flush();
    out.close(); 
}

最后是发送请求的代码:

package net.stormdev.MTA.SM.http;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class SimplePostClient {
public static String post(String site, String[] keys, String[] values){
    String data = "";
    if(keys.length > values.length){
        throw new RuntimeException("Invalid keys and values!");
    }

    try {   
        // Construct data
        for(int i=0;i<keys.length;i++){
            String key = keys[i];
            String value = values[i];
            if(data.length() < 1){
                data = URLEncoder.encode(key, "UTF-8") + "=" + URLEncoder.encode(value, "UTF-8");
                continue;
            }
            data += "&" + URLEncoder.encode(key, "UTF-8") + "=" +
                    URLEncoder.encode(value, "UTF-8");
        }

        // Send data
        URL url = new URL(site);
        URLConnection conn = url.openConnection();
        conn.setDoOutput(true);
        OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
        wr.write(data);
        wr.flush();

        // Get the response
        BufferedReader rd = new BufferedReader(
                new InputStreamReader(conn.getInputStream()));

        String response = "";
        String line;
        while ((line = rd.readLine()) != null) {
            response += line;
        }
        wr.close();
        rd.close();
        return response;
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}
}

【问题讨论】:

  • 如果您能提供更多信息会更好
  • 是的。堆栈跟踪和代码
  • 添加了堆栈跟踪! :)

标签: java servlets tomcat7 http-status-code-403


【解决方案1】:

403 表示请求被识别但由于某些原因拒绝继续进行,例如访问拒绝、不受信任的 URL 等。你不能得到响应体吗?这将有更详细的信息。

【讨论】:

  • 不知道该怎么做,抱歉。在我的 servlet 代码中,它位于 doPost 方法中,它应该只返回一个简单的字符串(但它没有,我得到 403)
  • 我已经添加了上面的错误和内容,我看不到额外的信息;对不起。
  • 酷,现在我们有了例外。我能知道你的代码的哪一行抛出了这个吗?
  • 第 40 行:新 InputStreamReader(conn.getInputStream()));
【解决方案2】:

如果这个问题出现在调用本地主机上部署的服务器,你必须检查你的

web.conf

CORS 过滤器的详细信息文件,如果包含,您需要从那里将其删除,以便可以接受来自本地的请求。

【讨论】:

    【解决方案3】:

    请检查您的结构目录项目。并检查文件夹 web 或 webapp 是否在 java 文件夹附近。

     - ---src
           - main
              - java
              - webapp
              - resources
           - test
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-06-14
      • 2014-05-13
      • 2017-01-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-25
      • 1970-01-01
      • 2022-01-26
      相关资源
      最近更新 更多