2016-07-18 35 views
0

我的要求是从两个不同的模块调用服务。但是,一些URL可以允许这两个模块,一些URL允许特定于该模块。 下面是我对实现当前的配置是如何限制在不同模块中访问服务

<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 package.Now我可以调用使用两个网址这一服务类似服务下面

/lions/barking 
/dogs/barking 

根据我的要求/lions/barking应该显示404错误。但它给出了答复。

但有些网址都应该工作。无论服务位于何处。

/lions/eat 
/dogs/eat 

怎么做配置,以实现该功能

任何帮助将不胜感激!!!!

+0

为狮子和狗创建超类和扩展他们匹配您需要的API端点。 – aksappy

回答

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() { 
    } 
} 
相关问题