System.setProperty(“sun.net.http.AllowerPrictedHeaders”和“true”)在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

我试图在http请求标头中发送源标头,但当我得到它的值时,我得到的是null,而不是我在源标头中设置的url

此外,我还通过使用以下命令,在jenkins作业中将受限头作为请求头的一部分发送

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;
    }
}