我已经在server.xml中配置了我的连接器,重定向从8080到8443,并在web.xml中使用相应的子标签设置security-constraint。它正确地重定向,但我想忽略HTTP访问并仅使用HTTPS。所以我不需要重定向或类似的东西。外部服务需要端点的HTTP访问,我想只通过HTTP启用该端点。
我尝试删除带有8080端口的连接器,但是使用这种方法,没有机会通过http获取请求。
答案 0 :(得分:1)
如果您停用http连接,则无法通过http访问您的应用程序。
因此,您可以实现一个过滤器,检查当前请求的协议是否为HTTP并允许端点URL,否则阻止请求。
在您的web.xml中,您可以声明以下过滤器:
<filter>
<filter-name>blockHttpFilter</filter-name>
<filter-class>com.example.BlockHttpFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>urlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
实施可能如下:
public class BlockHttpFilter implements Filter {
private ServletContext context;
public void init(FilterConfig fConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
if(req.isSecure() && checkHttpEnpointPath(req)){
chain.doFilter(request, response);
} else {
HttpServletResponse res = (HttpServletResponse)response;
res.sendError(403);
}
}
public void destroy() {
//we can close resources here
}
}