2014-10-01 9 views
1

html 또는 json 응답 (웹 또는 Android 클라이언트)을 반환하는 App Engine Restlet Project (v 2.2.2)와 다른 사용자의 db와 다른 데이터를 설정했습니다. HTTP 기본 인증을 구현했습니다. 그것은 모두 잘 작동합니다.Restlet 새 구성 요소의 web.xml 구성

내 기본 설정 기압 (I은 OFC를 단순화) :

MyApplication.java

public class MyApplication extends Application { 

    private ChallengeAuthenticator authenticatior; 
    private ChallengeAuthenticator createAuthenticator() {...} 
    public boolean authenticate(Request request, Response response) {...} 

    @Override 
    public Restlet createInboundRoot() { 
     this.authenticatior = createAuthenticator();   
     Router router = new Router(getContext()); 
     router.attachDefault(MyRestlet.class); 
     authenticatior.setNext(router); 
     return authenticatior; 
    } 

MyRestlet.java

public class MyRestlet extends ServerResource { 

     @Get("json") 
     public Representation getJSON() { 
      MyApplication app = (MyApplication) getApplication(); 
       if (!app.authenticate(getRequest(), getResponse())) { 
        // Not authenticated 
        return null; 
       } 
       else { 
        return data;  
       } 

     @Get("html") 
     public String getHTML() {...} 
} 

web.xml을

<?xml ...> 
<display-name>MyName</display-name> 

<context-param> 
<param-name>org.restlet.application</param-name> 
<param-value>x.MyApplication</param-value> 
</context-param> 

<servlet> 
<servlet-name>MyRestlet</servlet-name> 
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class> 
</servlet> 

<servlet-mapping> 
<servlet-name>MyRestlet</servlet-name> 
<url-pattern>/*</url-pattern> 
</servlet-mapping> 
</web-app> 

이제 암호화를 추가하고 키/인증서를 만들려고합니다. 내 가이드는 tutorial입니다. 간단한 구성 요소를 먼저 추가하고 HTTP를 유지하고 포트를 8183으로 변경하려고했습니다.이 경우는 tutorial입니다. 나는 이제 꽤 놀았으며 내 구성 요소가 작동하지 않는 것처럼 보입니다. 그래서 제 질문은 :이 메인 메서드를 어디에 두겠습니까 (다음 코드는 튜토리얼에서 가져온 것입니까?). 어느 클래스에 삽입해야합니까? 아니면 별도의 서버 클래스를 만들어야합니까? 그리고 web.xml보기에 필요한 변경 사항이 정확히 무엇인지 (이 점에 관해서는 많이 알지 못했습니다. 이것이 중요한 문제라고 생각합니다)? 어떤 도움을 주셔서 감사합니다!

public static void main(String[] args) throws Exception { 
    // Create a new Restlet component and add a HTTP server connector to it 
    Component component = new Component(); 
    component.getServers().add(Protocol.HTTP, 8182); 

    // Then attach it to the local host 
    component.getDefaultHost().attach("/trace", Part05.class); 

    // Now, let's start the component! 
    // Note that the HTTP server connector is also automatically started. 
    component.start(); 
} 

답변

0

JavaSE RESTLET 앱을 JavaEE 앱으로 변환하려고했습니다. "Restlet in Action"서적, 72 페이지에서 이해할 수있는 것은 서블릿 엔진이 들어오는 HTTP 및 HTTPS 요청을 처리 할 때 구성 요소에 서버를 연결하지 않아도된다는 것입니다.

또한이 튜토리얼은 web.xml의 INIT-PARAM 또는 param-name 구성 요소 파일을 가리 킵니다. 그러나 나를 위해, 위의 2 가지 변경 사항 중 아무 것도 작동하지 않습니다.

응용 프로그램 클래스를 INIT-PARAM으로 지정하고 책에서 제안한대로 HTTP 커넥터를 사용하지 않으면 API에 액세스 할 수 있지만 클라이언트 클래스에서 호출 할 수는 없습니다. 아래 오류 -

경고 :이 요청에 사용 된 프로토콜은 클라이언트 커넥터 목록에 선언되어 있지 않습니다. (HTTP/1.1). Component 클래스의 인스턴스를 사용하는 경우 해당 "clients"속성을 확인하십시오. 찾을 수 없음 (404) - 서버가 요청 URI

희망 일치하는 항목을 찾지 못했습니다 난에 대한 해결책을 발견


편집

어떤 식 으로든이 정보가 도움이 위의 문제 - 아래 코드를 추가해야했습니다.

 <init-param> 
      <param-name>org.restlet.clients</param-name> 
      <param-value>HTTP HTTPS FILE</param-value> 
     </init-param> 

또한 문제를 해결하기 위해 XML을 통해 구성 요소를 구성해야합니다.

http://restlet.com/learn/javadocs/2.1/jee/ext/org/restlet/ext/servlet/ServerServlet.html http://restlet.com/learn/javadocs/2.1/jee/api/org/restlet/Component.html?is-external=true

- URL은 더 많은 정보를 줄 아래
1

당신이 택한 경로 때문에 아마도 약간 혼란 스럽습니다.

원래 계획은 web.xml을 사용하여 GAE, Jetty 또는 Tomcat과 같은 컨테이너에서 실행되도록 RESTlet 웹 응용 프로그램을 만듭니다.

여러분이 제안하는 것은 구성 요소를 만들고 독립형 서버를 시작합니다 (Jetty의 내부 인스턴스를 시작 함). Google App Engine에서는 작동하지 않습니다.

web.xml 접근 방식을 계속 진행하고 https를 통해 서비스하도록 GAE를 구성해야합니다. 구성 지침은 https://cloud.google.com/appengine/kb/general#httpshttps://cloud.google.com/appengine/docs/java/config/webxml#Secure_URLs을 참조하십시오.

또 다른 팁 : 무언가가 무단으로 리소스에 액세스하려고 시도 할 때 상태를 반환합니다.