【发布时间】:2017-08-03 12:39:24
【问题描述】:
按照BalusC's关于该答案的说明:
How to stream audio/video files such as MP3, MP4, AVI, etc using a Servlet
我将以下 Context 元素添加到我的 Tomcat server.xml 以使我的媒体文件可用于 Tomcat 自己的 DefaultServlet。
<Context docBase="/home/jwi/media" path="/service/media" />
这就像魅力一样,媒体可在以下位置获得:
http://localhost:8080/service/media/example.mp4
我的应用程序(基于 Jersey 2.x 构建)中的 ApplicationPath 设置为:@ApplicationPath("service")。
在该应用程序中,我有一个请求过滤器,用于检查每个传入请求是否存在有效的用户会话。
@Provider
@PreMatching
@Priority(1)
public class SessionFilter implements ContainerRequestFilter {
@Context
private ServletContext _context;
@Context
private HttpServletRequest _request;
@Context
private HttpServletResponse _response;
public void filter(ContainerRequestContext requestContext) throws IOException {
HttpSession session = _request.getSession(false);
boolean isLoggedIn = session != null && session.getAttribute("username") != null;
boolean isLoginRequest = _request.getRequestURI().contains("login");
if (isLoggedIn || isLoginRequest) {
// Since filter chain is invoked by @Priority annotation here's nothing to do.
} else {
URI indexPage = UriBuilder.fromUri("/index.html").build();
requestContext.abortWith(Response.temporaryRedirect(indexPage).build());
}
}
}
我的问题是,过滤器永远不会在媒体元素上调用。因此,当我打开 http://localhost:8080/service/media/example.mp4 时,根本不会调用过滤器。
如何将 Tomcat 的 DefaultServlet 添加到我的请求过滤器中?
【问题讨论】: