Java GET请求被禁止,而POST请求将被罚款

Java GET请求被禁止,而POST请求将被罚款,java,rest,cross-domain,html5-canvas,tomcat6,Java,Rest,Cross Domain,Html5 Canvas,Tomcat6,在我的web应用程序中,我需要调用不同的web服务(由我开发/管理),以通过RESTAPI启动/管理资源。Web服务在tomcat6上运行。我可以从浏览器日志中看到POST请求正在通过,但GET请求被禁止。如果我从web服务本身发出相同的调用,那么我看不到任何问题。我已经为tomcat6定义了跨源过滤器,并提到了GET-in支持的方法,但问题仍然存在 我在web.xml中以这种方式在应用服务器级别本身定义了跨源过滤器。我正在使用来自的CORS筛选器库。这是一个tomcat6服务器,过滤器在($t

在我的web应用程序中,我需要调用不同的web服务(由我开发/管理),以通过RESTAPI启动/管理资源。Web服务在tomcat6上运行。我可以从浏览器日志中看到POST请求正在通过,但GET请求被禁止。如果我从web服务本身发出相同的调用,那么我看不到任何问题。我已经为tomcat6定义了跨源过滤器,并提到了GET-in支持的方法,但问题仍然存在

我在web.xml中以这种方式在应用服务器级别本身定义了跨源过滤器。我正在使用来自的CORS筛选器库。这是一个tomcat6服务器,过滤器在($tomcat6_HOME/conf/web.xml)中定义如下

<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
     <param-name>cors.allowOrigin</param-name>
        <param-value>*</param-value>
    </init-param>
    <init-param>
     <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE, OPTIONS</param-value>
    </init-param>
    <init-param>
     <param-name>cors.supportedHeaders</param-name>
     <param-value>*</param-value>
    </init-param>
</filter>

<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Request URL:https://remote.vm.mycompany.com/remote/tunnel?read:c2faeb31-4147-49e8-b8d3-53d89496e5ca:0
Request Method:GET
Status Code:403 Forbidden
Request Headersview source
Accept:*/*
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8
Connection:keep-alive
Host:remote.vm.mycompany.com
Origin:https://ec2-184-72-200-91.compute-1.amazonaws.com
Referer:https://ec2-184-72-200-91.compute-1.amazonaws.com/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/28.0.1500.71 Safari/537.36
Query String Parametersview sourceview URL encoded
read:c2faeb31-4147-49e8-b8d3-53d89496e5ca:0:
Response Headersview source
Access-Control-Allow-Credentials:true
Access-Control-Allow-Origin:https://ec2-184-72-200-91.compute-1.amazonaws.com
Content-Length:961
Content-Type:text/html;charset=utf-8
Date:Sun, 21 Jul 2013 17:17:37 GMT
Server:Apache-Coyote/1.1
Tomcat访问日志还显示GET请求已被禁止,但未在任何日志中提供任何线索

- - - [21/Jul/2013:17:17:37 +0000] POST /remote/tunnel?connect HTTP/1.1 200   -
- - - [21/Jul/2013:17:17:37 +0000] GET /remote/tunnel?read:c2faeb31-4147-49e8-b8d3-53d89496e5ca:0 HTTP/1.1 403   -
这是我的servlet代码。我正在尝试集成(HTML5 VNC客户端作为Web服务)

GuacamoleHTTPTunnelServlet(GPL许可)的文件如下:


我可能会错过什么?还有其他地方我可以找到线索吗?请帮助

您是否有任何与web.xml中配置的http方法相关的安全约束?我不知道你为什么选择一个单独的api来过滤你的请求?

你能附上你的控制器或Servlet代码吗?如果可能的话?@Karthikeyan我已经更新了Servlet代码。它是一个简单的servlet,其中get/post请求在父类中定义,我是一个新手。。如果我错了,请纠正我。我已经看到,如果请求来自除浏览器以外的任何地方,如果我们不在webservice中定义跨源过滤器,它将不会为请求提供服务。我所希望的就是能够从另一个web服务器发送GET和POST请求。如果有更好的方法,请帮助我,我通常看不到客户的差异。它主要基于这样一种协议,即当cors.allowOrigin没有发送GET请求的域时,他们talkCORs筛选器抛出403错误代码。
package com.mycompany.html5remote;

import java.util.Arrays;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import net.sourceforge.guacamole.GuacamoleException;
import net.sourceforge.guacamole.net.GuacamoleSocket;
import net.sourceforge.guacamole.net.GuacamoleTunnel;
import net.sourceforge.guacamole.net.InetGuacamoleSocket;
import net.sourceforge.guacamole.protocol.ConfiguredGuacamoleSocket;
import net.sourceforge.guacamole.protocol.GuacamoleClientInformation;
import net.sourceforge.guacamole.protocol.GuacamoleConfiguration;
import net.sourceforge.guacamole.servlet.GuacamoleHTTPTunnelServlet;
import net.sourceforge.guacamole.servlet.GuacamoleSession;

public class HttpTunnel extends GuacamoleHTTPTunnelServlet {

    private Logger logger = LoggerFactory.getLogger(HttpTunnel.class);

    @Override
    protected GuacamoleTunnel doConnect(HttpServletRequest request) throws GuacamoleException {

        HttpSession httpSession = request.getSession(true);
        logger.info("Inside doConnect Method.");


        GuacamoleClientInformation info = new GuacamoleClientInformation();

        String hostname = request.getParameter("hostname");
        String protocol = request.getParameter("protocol");

        // Create socket
        GuacamoleConfiguration config = new GuacamoleConfiguration();
        config.setProtocol(protocol);
        config.setParameter("hostname", hostname);
        //config.setParameter("hostname", "ec2-184-73-104-108.compute-1.amazonaws.com");
        if("vnc".equals(protocol)){
            config.setParameter("port", "5901");
        }else if ("rdp".equals(protocol)){
            config.setParameter("port", "3389");
        }else{
            config.setParameter("port", "22");
        }

        logger.info("Set the configuration. Creating the socket connection now..");

        // Return connected socket
        GuacamoleSocket socket =  new ConfiguredGuacamoleSocket(
                new InetGuacamoleSocket("localhost", 4822),
                config, info
        );

        logger.info("Successfully created socket connection.");


        // Create tunnel from now-configured socket
        GuacamoleTunnel tunnel = new GuacamoleTunnel(socket);

        // Attach tunnel
        GuacamoleSession session = new GuacamoleSession(httpSession);
        session.attachTunnel(tunnel);
        logger.info("Done");
        return tunnel;

    }

}