某些Rest API仅可在https上访问,而其他只能访问http

时间:2017-12-23 19:54:49

标签: spring tomcat ssl https

我在Tomcat上设置了SSL,并在其客户端上进行了代码和配置更改,以便客户端可以以编程方式访问http和https端口。现在,我如何配置应用程序或Tomcat,以便某些应用程序Rest API只能通过https访问,而其他应用程序只能通过http访问?该应用程序是用Spring构建的。它没有使用Spring Security。如果安装了Spring Security,则可以使用安全访问配置一些URL,其余URL具有不安全的访问权限。

2 个答案:

答案 0 :(得分:0)

您必须根据您的要求配置反向代理(NGINX服务器)以提供请求。

NGINX服务器需要放在tomcat服务器的前面,然后客户端将首先调用NGINX服务器,然后依赖于您可以配置的请求,将请求传递给http或https到您的tomcat。

http://nginx.org/en/docs/http/configuring_https_servers.html

答案 1 :(得分:0)

您可以通过编写Filter并将其绑定到您希望的任何网址格式来强制执行您对任何网址的任何限制。对于这种情况,您可以使用Filter,如下所示:

import javax.servlet.Filter;

public class SecureFilter implements Filter {
    public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
        if(!request.isSecure()) {
            // Do whatever you want
            // a. throw an error - e.g. respond with 403
            // b. redirect to HTTPS
            // c. ??
        } else {
            // Allow the request to be processed as usual
            chain.doFilter(request, response);
        }
    }
}

然后,在您的WEB-INF/web.xml文件中,注册Filter并将其映射到某些网址格式:

<filter>
    <filter-name>REST-security</filter-name>
    <filter-class>com.whatever.SecureFilter</filter-class>
</filter>

....

<filter-mapping>
    <filter-name>REST-security</filter-name>
    <url-pattern>/rest/*</url-pattern>
    <url-pattern>/api/*</url-pattern>
    <url-pattern>/anything-else/*</url-pattern>
</filter-mapping>