我有java应用程序(myapp),它说有三个休息端点
我的要求是我需要部署3个相同应用程序的实例,比如myapp1,myapp2,myapp3.myapp1应该只允许/个人端点myapp2应该只允许/ languages端点myapp3应该只允许/ countries端点
为了实现这一点,我不希望有太多的java代码更改.是否有可能通过web.xml或springsecurity.xml或类似的东西实现?
我的java应用程序使用的是jersey框架.
以下是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>
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,您将返回com.local.service.PersonDataApplication中的服务类列表.
您可以从运行tomcat的命令行中获取一个参数作为系统属性,并决定在com.local.service.PersonDataApplication :: getClasses方法中返回哪些类.
假设你有一个每个端点的服务类,无论如何都是有意义的......
假设您使用脚本catalina.sh启动tomcat,您可以执行以下操作:
export JAVA_OPTS=-DpersonsEndpoint=true
catalina.sh
Run Code Online (Sandbox Code Playgroud)
在你的getClasses方法中:
if(System.getProperty("personsEndpoint") != null && System.getProperty("personsEndpoint").equals("true")) {
... return the person endpoint class
}
Run Code Online (Sandbox Code Playgroud)
编辑:
另外一个选项
我不知道为什么你选择了一个自定义的Application类(它可能对你的用法有意义),但如果你可以删除它,你可以在web.xml中使用jersey.config.server.provider.classnames来定义要扫描哪些类,然后只能在web.xml中进行更改.
在一个配置中:
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
com.local.service.PersonService
</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
在另一个配置:
<init-param>
<param-name>jersey.config.server.provider.classnames</param-name>
<param-value>
com.local.service.LanguagesService
</param-value>
</init-param>
Run Code Online (Sandbox Code Playgroud)
此外,假设这些类是分开的.
com.local.service.PersonService - 所有jaxrs注释方法都与/ persons端点有关的类.
| 归档时间: |
|
| 查看次数: |
651 次 |
| 最近记录: |