我的要求是从两个不同的模块调用服务。但是,一些网址可以允许两个模块,一些网址允许特定于该模块。 以下是我目前的实现配置
<servlet>
<servlet-name>animals</servlet-name>
<servlet-class>
org.glassfish.jersey.servlet.ServletContainer
</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>com.lion,com.dog</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>animals</servlet-name>
<url-pattern>/lion/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>animals</servlet-name>
<url-pattern>/dogs/*</url-pattern>
</servlet-mapping>
例如,如果我有一项名为'barking'
的服务,则此服务位于com.dog
包中。现在,我可以使用以下两个网址调用此服务
/lions/barking
/dogs/barking
根据我的要求,/lions/barking
应显示404
错误。但它会给出回复。
但是一些网址都应该有效。无论服务位于何处。
/lions/eat
/dogs/eat
如何进行配置以实现该功能
任何帮助将不胜感激!!!!
答案 0 :(得分:0)
使用“http Servlet请求过滤器”根据您的业务需求自定义和配置/提供请求。
请在下面找到示例代码:
public class RequestUrlFilter implements Filter {
private static List<String> validUrls = new ArrayList<>();
public void init(FilterConfig filterConfig) throws ServletException {
//Load the valid list of urls here
validUrls.add("/lions/eat");
validUrls.add("/dogs/eat");
validUrls.add("/dogs/barking");
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain)
throws IOException, ServletException {
if(validUrls.contains(((HttpServletRequest)request).getRequestURI()) {
filterChain.doFilter(request,response);
} else {
//Error Response
RequestDispatcher rd = (HttpServletRequest)request.getRequestDispatcher("Error.jsp");
rd.forward(request, response);
}
}
public void destroy() {
}
}