0

아파치 톰캣 7에서 Google Glass Quickstart 프로젝트를 설정하려고합니다. 시작하려고 할 때 잘 작동합니다 : http://localhost:8080 내 홈 네트워크에 있습니다. 하지만 회사 네트워크에있을 때는 작동하지 않습니다.미러 빠른 시작 java - 연결이 거부되었습니다.

액세스 토큰 교환을 시도하기 전에 context.xml과 코드에 프록시 구성을 설정했습니다. 소스 코드에있는 AuthServlet 클래스에서 예외가 거부되었습니다. 여기 프록시 설정을위한 시스템 변수를 정의하기 위해 소스 코드를 수정했습니다.

프록시를 설정 한 후 웹의 URL에 연결하려고하면 인터넷에 연결할 수는 있지만 토큰 요청 교환이 실패하고 왜 이런 일이 발생하는지 확실하지 않습니다. 누군가가 올바른 방향으로 나를 가리켜 주시겠습니까? 다음은

프록시 설정을 보여줍니다 코드입니다 : 당신은 HTTP 프록시 연결을 설정하는 것을 아래
public class AuthServlet extends HttpServlet { 
    private static final Logger LOG = Logger.getLogger(AuthServlet.class.getSimpleName()); 

    @Override 
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException { 
     System.out.println("inside authservlet"); 
     System.setProperty("http.proxyHost", "proxy server"); 
     System.setProperty("http.proxyPort", "proxy server port"); 
     Authenticator.setDefault(
       new Authenticator() { 
        public PasswordAuthentication getPasswordAuthentication() { 
         return new PasswordAuthentication(
           "username", "password".toCharArray()); 
        } 
       } 
      ); 
     System.setProperty("http.proxyUser", "username"); 
     System.setProperty("http.proxyPassword", "password"); 
     System.out.println("finished proxy set up"); 
     try { 
     URL myURL = new URL("http://google.com"); 
     URLConnection myURLConnection = myURL.openConnection(); 
     myURLConnection.connect(); 
    } catch (MalformedURLException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
     System.out.println("trying to connect to a URL"); 
    // If something went wrong, log the error message. 
    if (req.getParameter("error") != null) { 
     LOG.severe("Something went wrong during auth: " + req.getParameter("error")); 
     res.setContentType("text/plain"); 
     res.getWriter().write("Something went wrong during auth. Please check your log for details"); 
     return; 
    } 

    // If we have a code, finish the OAuth 2.0 dance 
    if (req.getParameter("code") != null) { 
     System.out.println("Got a code. Attempting to exchange for access token."); 

     AuthorizationCodeFlow flow = AuthUtil.newAuthorizationCodeFlow(); 
     TokenResponse tokenResponse = 
      flow.newTokenRequest(req.getParameter("code")) 
       .setRedirectUri(WebUtil.buildUrl(req, "/oauth2callback")).execute(); 
     //Error is in the above line. 

     // Extract the Google User ID from the ID token in the auth response 
     String userId = ((GoogleTokenResponse) tokenResponse).parseIdToken().getPayload().getUserId(); 

예외

inside AuthFilter 
sending redirect 
inside AuthFilter 
Skipping auth check during auth flow 
inside authservlet 
finished proxy set up 
trying to connect to a URL 
No auth context found. Kicking off a new auth flow. 
inside AuthFilter 
sending redirect 
inside AuthFilter 
Skipping auth check during auth flow 
inside authservlet 
finished proxy set up 
trying to connect to a URL 
No auth context found. Kicking off a new auth flow. 
inside AuthFilter 
Skipping auth check during auth flow 
inside authservlet 
finished proxy set up 
trying to connect to a URL 
Got a code. Attempting to exchange for access token. 
Feb 18, 2014 1:04:20 PM org.apache.catalina.core.StandardWrapperValve invoke 
SEVERE: Servlet.service() for servlet [oauth2callback] in context with path [] threw exception 
java.net.ConnectException: Connection refused: connect 
    at java.net.DualStackPlainSocketImpl.waitForConnect(Native Method) 
    at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source) 
    at java.net.AbstractPlainSocketImpl.connect(Unknown Source) 
    at java.net.PlainSocketImpl.connect(Unknown Source) 
    at java.net.SocksSocketImpl.connect(Unknown Source) 
    at java.net.Socket.connect(Unknown Source) 
    at sun.security.ssl.SSLSocketImpl.connect(Unknown Source) 
    at sun.net.NetworkClient.doConnect(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.http.HttpClient.openServer(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.<init>(Unknown Source) 
    at sun.net.www.protocol.https.HttpsClient.New(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source) 
    at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(Unknown Source) 
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(Unknown Source) 
    at com.google.api.client.http.javanet.NetHttpRequest.execute(NetHttpRequest.java:77) 
    at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:965) 
    at com.google.api.client.auth.oauth2.TokenRequest.executeUnparsed(TokenRequest.java:283) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:158) 
    at com.google.api.client.googleapis.auth.oauth2.GoogleAuthorizationCodeTokenRequest.execute(GoogleAuthorizationCodeTokenRequest.java:79) 
    at com.google.glassware.AuthServlet.doGet(AuthServlet.java:86) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.google.glassware.ReauthFilter.doFilter(ReauthFilter.java:53) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at com.google.glassware.AuthFilter.doFilter(AuthFilter.java:51) 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
    at java.lang.Thread.run(Unknown Source) 

답변

1

문제와 로그입니다 되나 OAuth 교환은 HTTPS 연결을 사용합니다. 최소한

, 당신은

systemProperties.setProperty("https.proxyHost", "proxy server"); 
systemProperties.setProperty("https.proxyPort", "secure proxy port"); 

처럼 뭔가 HTTPS에 대한 설정 프록시 정보가 필요합니다 그리고 당신은 그러나,이다 https://google.com/

에 대한 연결을 테스트해야한다 , 적어도해야 할 수도 있습니다. 현실은 훨씬 더 복잡해질 수 있다는 것입니다. HTTPS는 실제로 프록시를 통해 작동하지 않으며, 프록시는 기본적으로 그 뒤에있는 전체 보안의 많은 부분을 근본적으로 손상시킵니다. 고의적으로 보안 제어를 훼손 할 수 있도록 설정해야 할 다른 많은 것들이 있으며, 실제로 그렇게해서는 안됩니다. (하지만해야 할 일이 있다면 How do a send an HTTPS request through a proxy in Java?에는해야 할 일에 대한 몇 가지 지침이있는 것처럼 보입니다.)

그러나 이것은 솔직히 문제의 시작일뿐입니다. 프록시를 통해 물건을 보낼 수 있다는 의미이기는하지만 Mirror API는 웹 훅을 여러 함수의 콜백으로 사용하며 이러한 콜백은 HTTPS를 통해 전달됩니다. 따라서 프록시는 들어오는 HTTPS 연결을 처리하여 서버에 라우팅 할 수 있어야합니다.

App Engine에서 이러한 문제가 처리되므로 테스트 할 수 있습니다.

+0

빠른 응답을 주셔서 감사합니다. 프록시 설정을 https로 변경 한 후 제대로 작동했으며 과거에 얻을 수 있었으며 회사 네트워크 내부에서 빠른 시작 프로젝트의 색인 페이지를 볼 수있었습니다. – ghn