Код: Выделить всё
@Component
@Order(1)
public class ParameterHandlingFilter implements Filter {
public static ThreadLocal EXAMPLE = new ThreadLocal();
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws ServletException, IOException {
HttpServletRequest req = (HttpServletRequest) request;
EXAMPLE.set(req.getParameter("example"));
try {
chain.doFilter(request, response);
}finally {
EXAMPLE.remove();
}
}
}
< /code>
Множество статей, которые предлагают использовать ScopedValues в качестве лучшего подхода, особенно с учетом виртуальных тем. Sonarqube. < /p>
public class ParameterHandlingFilterScopedValue implements Filter {
public static final ScopedValue EXAMPLE = ScopedValue.newInstance();
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
HttpServletRequest req = (HttpServletRequest) request;
ScopedValue.where(EXAMPLE, req.getParameter("example")).run(() -> {
try {
chain.doFilter(request, response);
}
catch (Exception e) {
throw new RuntimeException(e);
}
});
}
}
Подробнее здесь: https://stackoverflow.com/questions/795 ... g-boot-app