如何限制不同模块中的服务访问

时间:2016-07-18 07:49:02

标签: java spring rest servlets jersey

我的要求是从两个不同的模块调用服务。但是,一些网址可以允许两个模块,一些网址允许特定于该模块。 以下是我目前的实现配置

<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

如何进行配置以实现该功能

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

1 个答案:

答案 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() {
    }
}