2017-02-17 11 views
1

У меня есть Java-приложение (MYAPP), который говорят следующие три отдыха оконечныекак отключить конечную точку покоя от приложения Java с помощью web.xml или так

  1. LOCALHOST: 8080/чел
  2. LOCALHOST: 8080/языки
  3. LOCALHOST: 8080/страны

Мое требование мне нужно развернуть 3 экземпляров одного и того же приложения сказать myapp1, myapp2, myapp3. myapp1 должен позволять только/лицам конечной точке myapp2 должен позволить только/языкам конечных точкам myapp3 должны позволять только/стране конечной точке

Для достижения этой цели я предпочитаю не иметь так много изменений кода Java. Есть ли возможность достичь через web.xml или springsecurity.xml или что-то похожее?

My java application использует каркас джерси.

Ниже web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>ResourcesAPI</display-name> 
    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>/WEB-INF/spring-security.xml</param-value> 
    </context-param> 
    <servlet> 
     <servlet-name>PersonDataService</servlet-name> 
     <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
     <init-param> 
      <param-name>javax.ws.rs.Application</param-name> 
      <param-value>com.local.service.PersonDataApplication</param-value> 
     </init-param> 
     <load-on-startup>1</load-on-startup> 
     <async-supported>true</async-supported> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>PersonDataService</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 

    <filter> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
    </filter> 

    <filter-mapping> 
     <filter-name>springSecurityFilterChain</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
    <filter-mapping> 
     <filter-name>request-logging</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 
</web-app> 
+0

Пожалуйста, поделитесь дополнительной информацией относительно того, как вы интегрируете свое приложение с Джерси. Это встроенный сервер? Вы используете Tomcat и развертываете войну? поделиться своим существующим web.xml и т. д. – gba

+0

@gba, развертывание в качестве войны с использованием сервера Tomcat. добавил мой web.xml к вопросу. – shatthi

+0

Посмотрите мои последние изменения. Есть 2 варианта. – gba

ответ

6

Если я правильно понял вы возвращаете список классов обслуживания в com.local.service.PersonDataApplication.

Вы можете взять параметр из командной строки, на котором работает tomcat, как системное свойство, и решить, какие классы возвращать в com.local.service.PersonDataApplication :: getClasses.

Предполагая, что у вас есть класс обслуживания для каждой конечной точки, которая имеет смысл в любом случае ...

Предполагая, что вы начинаете с кота сценарием catalina.sh вы можете сделать что-то вроде:

export JAVA_OPTS=-DpersonsEndpoint=true 
catalina.sh 

И в методе getClasses:

if(System.getProperty("personsEndpoint") != null && System.getProperty("personsEndpoint").equals("true")) { 
    ... return the person endpoint class 
} 

EDIT:

Другого варианта

Я не знаю, почему вы выбрали для своего класса Application (Это может иметь смысл для вашего использования), но если бы вы могли бросить его, вы можете использовать jersey.config.server.provider .classnames в вашем web.xml, чтобы определить, какие классы сканировать, а затем вы можете делать свои изменения только в web.xml.

В одном конфиге:

<init-param> 
    <param-name>jersey.config.server.provider.classnames</param-name> 
    <param-value> 
     com.local.service.PersonService 
    </param-value> 
</init-param> 

В другой конфигурации:

<init-param> 
    <param-name>jersey.config.server.provider.classnames</param-name> 
    <param-value> 
     com.local.service.LanguagesService 
    </param-value> 
</init-param> 

Также здесь предположение о том, что классы разделены.

com.local.service.PersonService - класс, в котором все ваши аннотированные методы jaxrs относятся к конечной точке/лицам.

+0

Я выполнил ваш вариант 1, и его работы прекрасны. Спасибо @gba за вашу помощь. – shatthi