2013-07-17 6 views
1

내 웹 구성은 포트 8080의 http와 포트 8081 및 8082의 https를 선언합니다.특정 URL에 대한 액세스를 특정 포트로 제한하는 방법은 무엇입니까?

내 서블릿에서 특정 URL 패턴에 대한 액세스를 특정 포트 (예 : 특정 포트)로 제한하려고합니다./Admin에 대한 요청은 포트 8082에 있지 않으면 거부되어야합니다.이 작업은 매우 간단하며 서블릿의 서비스 메소드에서 포트 번호를 확인할 수 있습니다.

하지만 고객이 포트를 변경할 수 있어야합니다. 고객이 관리 요청을 포트 9000 (8083 대신)에서만 허용하려는 경우이 전략은 실패합니다.

내가 생각할 수있는 접근법 중 하나는 server.xml의 커넥터에 추가 속성을 추가하고 서블릿에 액세스하는 것입니다. 이것이 가능한가? 정교

, 나는 다음과 같이 내 서블릿이에 server.xml

<Connector port="9000" connectorType="admin".... 

에서 다음과 같이 뭔가를 추가 한 다음 어떻게 든 프로그램 싶어. 내가 실현 getConnectorProperties 존재하지 않는, 이것은 단지 예일뿐입니다.

if (request.getRequestURL().startsWith("/admin")) { 
    String connectorType = request.getConnectionProperties().get("connectorType"); 
    if (! "admin".equals(connectorType)) { 
    // return unauthorized 

이 문제를 해결하는 방법에 대한 다른 제안 사항이 있습니까?

답변

1

다른 포트에 대해 다른 컨텍스트 루트 (= 앱)를 사용하고있는 것처럼 보입니다. 이것은 프로그래밍 방식으로해서는 안됩니다. 다른 포트 또는 프로토콜을 허용하는 응용 프로그램은 다른 Service 구성 요소로 server.xml에 구성됩니다 이것은 최소한의 예입니다

<Server> 
    <!-- Define one Service for the open app --> 
    <Service name="myOpenApp"> 
     <Connector port="8080"/> 
     <Engine name="myOpenApp" defaultHost="localhost"> 
      <Host name="localhost"> <!-- default appBase is webapps --> 
       <Context docBase="path/to/my/open/app"/> 
       <!-- docBase is relative to appBase but may also refer an absolute path --> 
      </Host> 
     </Engine> 
    </Service> 

    <!-- and another for the restricted --> 
    <Service name="onlyForAdmins"> 
     <Connector port="8081" SSLEnabled="true" scheme="https"/> 
     <Connector port="8082" SSLEnabled="true" scheme="https"/> 
     <Engine name="onlyForAdmins" defaultHost="localhost"> 
      <Host name="localhost"> <!-- default appBase is webapps --> 
       <Context docBase="path/to/admins/only"/> 
       <!-- docBase is relative to appBase but may also refer an absolute path --> 
      </Host> 
     </Engine> 
    </Service> 
</Server> 

하는 것으로.

더 복잡한 URL 패턴이 필요한 경우 web.xml 개의 애플리케이션 (servlet-mappings 등)을 사용할 수 있습니다.

기본적으로 권한 부여 오류가 아닙니다 ... 매핑되지 않은 URL입니다. 응용 프로그램은 비 SSL 포트에서 관리 자원을 지원하지 않습니다. 그러면 404 page not found이 표시됩니다.

+0

장면 뒤에서 어떤 일이 발생합니까? 이 경우 두 개의 인스턴스를 생성합니까? –

+1

인스턴스 무엇? 여전히 유일한 프로세스가 있습니다. 하지만 둘 ... 서비스 :). 서비스는 커넥터를 엔진에 바인딩합니다. [자신의 문서] (https://tomcat.apache.org/tomcat-7.0-doc/config/service.html)에서 더 읽을 수 있습니다. – yair

관련 문제