当前位置: 首页 > 面试题库 >

Servlet过滤器:如何从ServletRequest中获取所有标头?

陈法
2023-03-14
问题内容

这是我的WebFilter模样

@WebFilter("/rest/*")
public class AuthTokenValidatorFilter implements Filter {

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

    @Override
    public void doFilter(final ServletRequest servletRequest, final ServletResponse servletResponse, final FilterChain filterChain) throws IOException, ServletException {
        final Enumeration<String> attributeNames = servletRequest.getAttributeNames();
        while (attributeNames.hasMoreElements()) {
            System.out.println("{attribute} " + servletRequest.getParameter(attributeNames.nextElement()));
        }

        final Enumeration<String> parameterNames = servletRequest.getParameterNames();
        while (parameterNames.hasMoreElements()) {
            System.out.println("{parameter} " + servletRequest.getParameter(parameterNames.nextElement()));
        }
        filterChain.doFilter(servletRequest, servletResponse);
    }

    @Override
    public void destroy() {
    }
}

我试图在线查找有关如何HTTP headers从请求中获取价值的信息。

我什么也没找到,所以我尝试枚举,servletRequest.getAttributeNames()并且servletRequest.getParameterNames()一无所知,但是没有任何标题。

问题
如何获得来自请求的所有标头?


问题答案:

类型转换ServletRequestHttpServletRequest(仅当ServletRequest request是一个instanceof HttpServletRequest)。

然后可以使用HttpServletRequest.getHeader()HttpServletRequest.getHeaderNames()方法。

像这样:

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    HttpServletRequest httpRequest = (HttpServletRequest) request;
    Enumeration<String> headerNames = httpRequest.getHeaderNames();

    if (headerNames != null) {
            while (headerNames.hasMoreElements()) {
                    System.out.println("Header: " + httpRequest.getHeader(headerNames.nextElement()));
            }
    }

    //doFilter
    chain.doFilter(httpRequest, response);
}


 类似资料:
  • 问题内容: 我定义了一个,并且具有带有Spring注释的Java类。 我想将Bean 放入我的,因此尝试了以下操作: 但是它总是返回。我怎样才能得到一个Spring bean? 问题答案: 尝试: 你的bean在应用程序上下文中的名称/标识在哪里。甚至更好: 还可以看看GenericFilterBean及其子类。

  • (对不起我的英语,我说法语) 在我正在编写的过滤器中,我需要知道用户询问的servlet的名称。它将允许我检查 servlet 是否与我的数据库条目匹配。事实上,我正在编写一个限制过滤器。这是它的工作原理: 用户尝试获取链接到userListe Servlet的URL /users/liste 第一个过滤器(SimpleConnexion)检查用户对象是否在http会话中定义(=用户是否连接?)。

  • 假设我已经定义了这些RESTendpoint: 我定义了两个过滤器(日志记录和授权),在这些过滤器中,我想获得与当前请求匹配的url模式。使用上述示例: 如果请求是一个GET到 /variables,我需要"/变量" 如果请求是一个GET到 /variables/myfancyname,我需要"/变量/{name}" 如果请求是一个PUT到 /variables/myfancyname/myval

  • 问题内容: 假设我有: 每个产品都有属性。每个属性都有ID和一个值。我可以按属性筛选产品,但现在我要从MongoDB创建“可能的属性”列表。我想找到一种单独从ElasticSearch生成这样的列表的方法(也许只是向MongoDB查询其他数据)。 我需要的是: 这样的聚合看起来如何?获取所有可用属性(按分组)及其所有可能值(在所有产品中)? 问题答案: 您无法在一个查询中做到这一点,但在两个查询中

  • 问题内容: 我正在尝试找到一种方法,可将请求从过滤器重定向到登录页面,但我不知道如何从servlet重定向。我搜索了,但发现的是方法。我在过滤器的响应对象上找不到此方法。是什么原因 我该如何解决? 问题答案: 在Filter中,响应是而不是。因此将强制转换为。 如果使用上下文路径: 也不要忘记在最后打电话。

  • 编辑-过滤器用于缓存响应。我需要缓存AJAXHandler转发到的各个servlet的响应,而不是AJAXHandler本身最终返回的捆绑响应。