Java 从HttpServletRequest中删除头值
我已经编写了一个web服务,并以Java 从HttpServletRequest中删除头值,java,web-services,validation,servlets,http-headers,Java,Web Services,Validation,Servlets,Http Headers,我已经编写了一个web服务,并以HttpServletRequest对象的形式获取请求,然后发送所有头进行基本验证,如检查空格或null等 public void validateHeader(HttpServletRequest request) Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()) { String
HttpServletRequest
对象的形式获取请求,然后发送所有头进行基本验证,如检查空格或null等
public void validateHeader(HttpServletRequest request)
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
public void validateHeader(HttpServletRequest)
枚举headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
字符串键=(字符串)headerNames.nextElement();
字符串值=request.getHeader(键);
genericHeaderValidator(键、值);
}
}
正如您可以看到的request.getHeaderNames()代码>返回枚举
.
但在某些Web服务中,我想跳过验证,因为上面的代码是在其他类中编写的,我想保持它的完整性,并希望更改在调用方完成。
例如
如果我想跳过名为“content type”的标题的验证,那么当我执行request.removeAttribute(“content type”);
它没有删除header属性,因此我进一步考虑将其从枚举headerNames
但是
是否有人知道如何从HttpServletRequest
对象的头参数中删除元素。属性、参数和头,这三者在HttpRequest的上下文中是不同的。所以,request.removeAttribute(“xyz”)
将删除请求中名为xyz
的属性,而不是标头。据我所知,您不能像那样删除或修改标题
以下是我能想到的不同方法来达到这个目的
选项1:当要忽略的标题为常量时
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
if(!key.equals("content-type") {
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
}
选项2:由调用方(您的案例)确定要忽略验证的标题时。按如下方式传递不需要验证的标题集:
public void validateHeader(HttpServletRequest request, Set<String> headersToBeIgnored) {
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
if(!headersToBeIgnored.contains(key){
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
}
public void validateHeader(HttpServletRequest请求,设置headersToBeIgnored){
枚举headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
字符串键=(字符串)headerNames.nextElement();
如果(!headersToBeIgnored.contains)(键){
字符串值=request.getHeader(键);
genericHeaderValidator(键、值);
}
}
}
因此,在这里,您可以从调用方传递不需要验证的头集。在头上循环时,只需检查头是否包含在headersToBeIgnored
中,然后不验证它
选项3:扩展HttpServletRequestWrapper
正如您所说,您需要从调用者端删除标题,此处接受的答案()正好满足您的目的。您可以扩展HttpServletRequestWrapper
并覆盖getHeaderNames();
,在其中您可以返回另一个只添加了所需标题的枚举
但是,对于从不同的调用者返回的每一组不同的报头,您需要有一个单独的实现。因此,如果您不需要有许多不同的调用者,这应该是很好的
在上面的回答中,您需要删除而不是添加。属性、参数和头,这三个在HttpRequest的上下文中都是不同的。因此,request.removeAttribute(“xyz”);
将删除请求中名为xyz
的属性,而不是标题。据我所知,您不能像那样删除或修改标题
以下是我能想到的不同方法来达到这个目的
选项1:当要忽略的标题为常量时
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
if(!key.equals("content-type") {
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
}
选项2:当调用方(您的案例)确定要忽略验证的标题时。按如下方式传递不需要验证的标题集:
public void validateHeader(HttpServletRequest request, Set<String> headersToBeIgnored) {
Enumeration<String> headerNames = request.getHeaderNames();
while (headerNames.hasMoreElements()) {
String key = (String) headerNames.nextElement();
if(!headersToBeIgnored.contains(key){
String value = request.getHeader(key);
genericHeaderValidator(key, value);
}
}
}
public void validateHeader(HttpServletRequest请求,设置headersToBeIgnored){
枚举headerNames=request.getHeaderNames();
while(headerNames.hasMoreElements()){
字符串键=(字符串)headerNames.nextElement();
如果(!headersToBeIgnored.contains)(键){
字符串值=request.getHeader(键);
genericHeaderValidator(键、值);
}
}
}
因此,在这里,您可以从调用方传递不需要验证的头集。在头上循环时,只需检查头是否包含在headersToBeIgnored
中,然后不验证它
选项3:扩展HttpServletRequestWrapper
正如您所说,您需要从调用者端删除标题,此处接受的答案()正好满足您的目的。您可以扩展HttpServletRequestWrapper
并覆盖getHeaderNames();
,在其中您可以返回另一个只添加了所需标题的枚举
但是,对于从不同的调用者返回的每一组不同的报头,您需要有一个单独的实现。因此,如果您不需要有许多不同的调用者,这应该是很好的
在上面的回答中,您需要删除而不是添加。No实际上,对于一些调用方,我想跳过验证,因此我问了如何从调用方端删除头,我想我必须使用Adapter
模式编写一个类,其中迭代器可以作为目标,枚举
可以作为目标dapteeNo实际上,对于一些调用方,我想跳过验证,因此我已经询问了如何从调用方端删除头,我想我必须使用适配器
模式编写一个类,其中迭代器
可以作为目标,而枚举
可以被改编