Это зависит от языка и структуры веб-службы, которую вы хотите использовать.
В заголовке вашего вопроса упоминается "Фильтр сервлета", поэтому я предполагаю, что вы работаете с контейнером приложения Java.Если ваш ws-фреймворк не поддерживает отображение заголовков запросов в объекты-значения, вы можете использовать фильтр сервлетов, который обрабатывает заголовок и сохраняет информацию там, где вы можете получить ее позже.Лучший вариант - поместить его в атрибут запроса.Если вы не можете добраться до HttpServletRequest позже (что, вероятно, заставляет вас задать этот вопрос), вы можете сохранить его в переменной ThreadLocal, но это сложнее.
Я приведу вам минимальный пример:
import java.io.IOException;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
public class Filter implements javax.servlet.Filter {
public ThreadLocal<String> local;
@Override
public void doFilter(ServletRequest req, ServletResponse response,
FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest)req;
String bar = request.getHeader("foo");
local.set(bar);
// you can now retrieve the header value in your code with Filter.local.get()
try {
chain.doFilter(request, response);
} finally {
local.remove(); // clean up
}
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig arg0) throws ServletException {
local = new ThreadLocal<String>();
}
}
Это работает, но в реальной реализации вы должны хранить объект вашего собственного класса в ThreadLocal (например, Bean) вместо простой String.Вам следует рассмотреть возможность размещения переменной ThreadLocal за пределами вашего фильтра (например, в качестве статической переменной где-то в более логичном месте).