gpt4 book ai didi

java - 在Tomcat自带的DefaultServlet上调用ContainerRequestFilter

转载 作者:行者123 更新时间:2023-11-28 23:19:34 24 4
gpt4 key购买 nike

正在关注 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")

在该应用程序中,我有一个请求过滤器,用于检查有效用户 session 的每个传入请求。

@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 添加到我的请求过滤器中?

最佳答案

你有没有考虑过Servlet Filter相反?

@WebFilter("/service/media/*")
public class SessionFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {

...

chain.doFilter(request, response);
}

@Override
public void destroy() {

}
}

关于java - 在Tomcat自带的DefaultServlet上调用ContainerRequestFilter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45484467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com