System.setProperty(“sun.net.http.AllowerPrictedHeaders”和“true”)在jenkins中不起作用
我试图在http请求标头中发送源标头,但当我得到它的值时,我得到的是null,而不是我在源标头中设置的url 此外,我还通过使用以下命令,在jenkins作业中将受限头作为请求头的一部分发送System.setProperty(“sun.net.http.AllowerPrictedHeaders”和“true”)在jenkins中不起作用,jenkins,header,request,system,Jenkins,Header,Request,System,我试图在http请求标头中发送源标头,但当我得到它的值时,我得到的是null,而不是我在源标头中设置的url 此外,我还通过使用以下命令,在jenkins作业中将受限头作为请求头的一部分发送 System.setProperty("sun.net.http.allowRestrictedHeaders", "true") 但是这个命令似乎不起作用。我遇到了同样的问题,对我起作用的是在pom.xml中的surefire插件配置中设置系统参数: <build> <plug
System.setProperty("sun.net.http.allowRestrictedHeaders", "true")
但是这个命令似乎不起作用。我遇到了同样的问题,对我起作用的是在
pom.xml
中的surefire插件配置中设置系统参数:
<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>
org.apache.maven.plugins
maven surefire插件
2.17
真的
无法在Jenkins作业中工作的根本原因可能是您的Jenkins实例正在使用OpenJDK构建项目
在下面来自OpenJDK 7的源代码中,它显示了它正在使用一个静态块来设置allowedRestrictedHeaders
系统属性,并且在初始化HttpURLConnection
后不会被重置
如果除了pom.xml
解决方案之外,还将JVM arg设置在下面,那么它也可以工作
“-Dsun.net.http.AllowerPrictedHeaders=true”
静态{
maxRedirects=java.security.AccessController.doPrivileged(
新建sun.security.action.GetIntegerAction(
“http.maxrirects”,defaultmaxrirects)).intValue();
版本=java.security.AccessController.doPrivileged(
新的sun.security.action.GetPropertyAction(“java.version”);
字符串代理=java.security.AccessController.doPrivileged(
新的sun.security.action.GetPropertyAction(“http.agent”);
if(agent==null){
agent=“Java/”+版本;
}否则{
agent=agent+“Java/”+版本;
}
userAgent=agent;
validateProxy=java.security.AccessController.doPrivileged(
新建sun.security.action.GetBooleanAction(
“http.auth.digest.validateProxy”).booleanValue();
validateServer=java.security.AccessController.doPrivileged(
新建sun.security.action.GetBooleanAction(
“http.auth.digest.validateServer”).booleanValue();
EnablesBuffer=java.security.AccessController.doPrivileged(
新建sun.security.action.GetBooleanAction(
“sun.net.http.errorstream.enableBuffering”).booleanValue();
timeout4ESBuffer=java.security.AccessController.doPrivileged(
新建sun.security.action.GetIntegerAction(
“sun.net.http.errorstream.timeout”,300)).intValue();
如果(timeout4ESBuffer我将添加到Cady和Hank的答案中:
如果您使用执行请求(我使用spring boot TestRestTemplate),则系统属性只静态读取一次
这意味着,在执行请求之前设置属性权限可能不会影响HttpURLConnection,尽管它会更改系统属性值
因此,请确保尽早设置(例如,由Maven设置)
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;
}
}