我有一个扩展filter
类的类,它看起来像:
@Component
@Order(Ordered.HIGHEST_PRECEDENCE)
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
System.out.println("--------------------------------------");
HttpServletRequest request = (HttpServletRequest) req;
req.setAttribute("test", "test");
final HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Allow-Headers", "Authorization, Content-Type");
response.setHeader("Access-Control-Max-Age", "3600");
if ("OPTIONS".equalsIgnoreCase(((HttpServletRequest) req).getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
问题是,我可以向请求
添加自定义标头
吗?我浏览了request
和req
中可用的所有方法,但没有找到任何方法。但是在debug
模式下,我发现在coyoterequest
中有header
的列表。如何在此添加自定义标头
?
不能在HttpServletRequest
对象中设置标头,但可以使用包装类。
请参阅以下指南:http://wilddiary.com/adding-custom-headers-java-httpservletrequest/
以防万一将来链接变得无效:
final class MutableHttpServletRequest extends HttpServletRequestWrapper {
// holds custom header and value mapping
private final Map<String, String> customHeaders;
public MutableHttpServletRequest(HttpServletRequest request){
super(request);
this.customHeaders = new HashMap<String, String>();
}
public void putHeader(String name, String value){
this.customHeaders.put(name, value);
}
public String getHeader(String name) {
// check the custom headers first
String headerValue = customHeaders.get(name);
if (headerValue != null){
return headerValue;
}
// else return from into the original wrapped object
return ((HttpServletRequest) getRequest()).getHeader(name);
}
public Enumeration<String> getHeaderNames() {
// create a set of the custom header names
Set<String> set = new HashSet<String>(customHeaders.keySet());
// now add the headers from the wrapped request object
@SuppressWarnings("unchecked")
Enumeration<String> e = ((HttpServletRequest) getRequest()).getHeaderNames();
while (e.hasMoreElements()) {
// add the names of the request headers into the list
String n = e.nextElement();
set.add(n);
}
// create an enumeration from the set and return
return Collections.enumeration(set);
}
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
MutableHttpServletRequest mutableRequest = new MutableHttpServletRequest(req);
...
mutableRequest.putHeader("x-custom-header", "custom value");
chain.doFilter(mutableRequest, response);
}
我正在尝试将基于Spring MVC xml的项目配置重构为基于Spring Boot java的配置。同时按如下方式设置shiro配置:
问题内容: 我正在与现有的servlet集成,该servlet从HTTP标头中提取一些属性。基本上,我实现的接口无法访问实际请求,它只能访问HTTP标头的k-> v映射。 我需要传递一个请求参数。计划是使用servlet过滤器从参数到标头值,但是HttpServletRequest对象当然没有addHeader()方法。 有任何想法吗? 问题答案: Extend ,覆盖标头吸气剂以返回参数: ..
大家好,我正在编写使用Spring Security和JWT令牌的身份验证。 我在配置中添加自己的过滤器。但该请求不包含在筛选器中。因此,对任何地址的所有请求都被执行,即使没有令牌。 过滤器
问题内容: 有谁知道如何使用JavaScript或jQuery添加或创建自定义HTTP标头? 问题答案: 根据您的需求,有几种解决方案… 如果要向 单个请求添加自定义标头(或标头集), 则只需添加属性: 如果要向 每个请求添加默认标头(或标头集),请 使用: 如果 要向每个请求添加标头(或标头集), 则将钩子与一起使用: 编辑(更多信息): 要注意的一件事情是,您只能定义一组默认标头,而只能定义一
问题内容: 我需要向来自WebView的每个请求添加自定义标头。我知道有用于的参数,但这些参数仅应用于初始请求。所有后续请求均不包含标头。我已经看过所有的替代,但是没有什么允许将标头添加到资源请求- 。任何帮助都会很棒。 问题答案: 尝试 要将标头添加到资源加载请求中,请定制WebViewClient并重写: