【问题标题】:System.setProperty("sun.net.http.allowRestrictedHeaders", "true") is not working in jenkinsSystem.setProperty("sun.net.http.allowRestrictedHeaders", "true") 在詹金斯中不起作用
【发布时间】:2015-11-15 05:02:05
【问题描述】:
我正在尝试在 http 请求标头中发送原始标头,但是当我获取它的值时,我得到的是 null 而不是我在原始标头中设置的 url。
我还启用了受限标头作为 jenkins 作业中请求标头的一部分发送,方法是使用以下
System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
但是这个命令好像不行。
【问题讨论】:
标签:
jenkins
header
request
system
【解决方案2】:
无法在 Jenkins 工作中工作的根本原因可能是您的 Jenkins 实例正在使用 OpenJDK 构建项目。
在下面来自 OpenJDK 7 的源代码中,它显示它使用静态块来设置 allowedRestrictedHeaders 系统属性,并且在 HttpURLConnection 初始化后不会被重置。
除了pom.xml 解决方案之外,如果您在 JVM arg 之下设置它也可以工作。
"-Dsun.net.http.allowRestrictedHeaders=true"
static {
maxRedirects = java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction(
"http.maxRedirects", defaultmaxRedirects)).intValue();
version = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("java.version"));
String agent = java.security.AccessController.doPrivileged(
new sun.security.action.GetPropertyAction("http.agent"));
if (agent == null) {
agent = "Java/" + version;
} else {
agent = agent + " Java/" + version;
}
userAgent = agent;
validateProxy = java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"http.auth.digest.validateProxy")).booleanValue();
validateServer = java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"http.auth.digest.validateServer")).booleanValue();
enableESBuffer = java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"sun.net.http.errorstream.enableBuffering")).booleanValue();
timeout4ESBuffer = java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction(
"sun.net.http.errorstream.timeout", 300)).intValue();
if (timeout4ESBuffer <= 0) {
timeout4ESBuffer = 300; // use the default
}
bufSize4ES = java.security.AccessController.doPrivileged(
new sun.security.action.GetIntegerAction(
"sun.net.http.errorstream.bufferSize", 4096)).intValue();
if (bufSize4ES <= 0) {
bufSize4ES = 4096; // use the default
}
allowRestrictedHeaders = ((Boolean) java.security.AccessController.doPrivileged(
new sun.security.action.GetBooleanAction(
"sun.net.http.allowRestrictedHeaders"))).booleanValue();
if (!allowRestrictedHeaders) {
restrictedHeaderSet = new HashSet<String>(restrictedHeaders.length);
for (int i = 0; i < restrictedHeaders.length; i++) {
restrictedHeaderSet.add(restrictedHeaders[i].toLowerCase());
}
} else {
restrictedHeaderSet = null;
}
}
【解决方案3】:
我遇到了同样的问题,对我有用的是在pom.xml 的surefire-plugin 配置中设置系统参数:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.17</version>
<configuration>
<systemPropertyVariables>
<sun.net.http.allowRestrictedHeaders>true</sun.net.http.allowRestrictedHeaders>
</systemPropertyVariables>
</configuration>
</plugin>
</plugins>
</build>