Chúng tôi hiện đang làm việc để thêm tiêu đề cho mỗi phản hồi từ ứng dụng của chúng tôi. Để thêm các tiêu đề này, chúng tôi đang sử dụng API Servlet Filter
-interface.Bộ lọc Java Servlet: Tôi phải thêm tiêu đề trước khi chuyển đến chuỗi, tài liệu hướng dẫn cách khác
Chúng tôi đã có các bộ lọc sau đây trong ứng dụng của chúng tôi:
public class SecurityFilter 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);
HttpServletResponse httpServletResponse = ((HttpServletResponse) response);
httpServletResponse.addHeader("X-Frame-Options", "DENY");
httpServletResponse.addHeader("X-Content-Type-Options", "nosniff");
}
@Override
public void destroy()
{
}
}
này (đặc biệt là doFilter
-method) được triển khai đúng theo tài liệu hướng dẫn, điều này cho thấy trình tự sau công việc:
- Kiểm tra yêu cầu
- Tùy chọn bọc đối tượng yêu cầu với triển khai tùy chỉnh để lọc nội dung hoặc tiêu đề cho đầu vào f iltering
tùy ý quấn đối tượng phản ứng với một thực hiện tùy chỉnh để lọc nội dung hoặc tiêu đề để lọc ra
- Hoặc gọi đơn vị tiếp theo trong chuỗi bằng cách sử dụng đối tượng FilterChain (chain.doFilter()),
- hoặc không vượt qua trên cặp request/response để đơn vị tiếp theo trong chuỗi bộ lọc để chặn quá trình xử lý yêu cầu
- tiêu đề trực tiếp thiết lập trên các phản ứng sau khi gọi của đối tượng tiếp theo trong chuỗi bộ lọc.
Theo như chúng ta có thể thấy, thứ tự của doFilter
-method của chúng tôi là đúng theo tài liệu hướng dẫn (vượt qua yêu cầu đến chuỗi đầu tiên như đã nêu dưới điểm 4, thêm tiêu đề tùy chỉnh sau đó như đã nêu dưới điểm 5). Tuy nhiên, tiêu đề chúng tôi thêm không hiển thị trong câu trả lời. Nếu chúng tôi thay đổi theo thứ tự như sau, mọi thứ có vẻ hoạt động tốt:
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletResponse httpServletResponse = ((HttpServletResponse) response);
httpServletResponse.addHeader("X-Frame-Options", "DENY");
httpServletResponse.addHeader("X-Content-Type-Options", "nosniff");
chain.doFilter(request, response);
}
Có ai giải thích được hành vi này không?
Có bất kỳ bộ lọc nào khác? –
@EvanKnowles có. Tôi nghĩ rằng đó là một phần của vấn đề, như Nikos Paraskevopoulos chỉ ra bên dưới một bộ lọc khác rất có thể cam kết yêu cầu. –