当前位置: 首页 > 知识库问答 >
问题:

Spring Boot时,Jolokia远程访问返回不存在'Access-Control-Allow-Origin'标头

韦高阳
2023-03-14

我在spring boot应用程序中使用jmx设置了jolokia,这样我就可以通过HTTP获取jmx信息。

application.properties和jolokia-access.xml都在类路径中,因此我可以看到对application.properties上的management.port所做的更改和对jolokia-access.xml的远程post访问限制被应用

pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.2.4.RELEASE</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jolokia</groupId>
        <artifactId>jolokia-core</artifactId>
    </dependency>
        :

Application.Properties

management.port=8888

endpoints.jolokia.path=/jolokia
endpoints.jolokia.enabled=true

endpoints.jmx.enabled=true

endpoints.cors.allowed-origins=*
endpoints.cors.allowed-methods=*
endpoints.cors.allowed-headers=*
<?xml version="1.0" encoding="UTF-8"?>
<restrict>
    <remote>
        <host>127.0.0.1</host>
        <host>localhost</host>
    </remote>

    <http>
        <method>post</method>
        <method>get</method>
    </http>

    <commands>
        <command>read</command>
        <command>list</command>
        <command>version</command>
    </commands>

    <cors>
        <allow-origin>http://localhost:*</allow-origin>
        <allow-origin>http://127.0.0.1:*</allow-origin>
    </cors>
</restrict>
$ curl -X POST http://127.0.0.1:8888/jolokia -d '{
    "type":"read",
    "mbean":"org.springframework.boot:type=Endpoint,name=healthEndpoint",
    "attribute":"Data"
}'
{"request":{"mbean":"org.springframework.boot:name=healthEndpoint,type=Endpoint","attribute":"Data","type":"read"},
"value":{"diskSpace":{"threshold":10485760,"free":204441415680,"status":"UP"},"db":{"database":"H2","hello":1,"status":"UP"},"status":"UP"},
"timestamp":1433908260,"status":200}


$ curl -X POST http://127.0.0.1:8888/jolokia -d '{
    "type":"read", 
    "mbean":"java.lang:type=Memory", 
    "attribute":"HeapMemoryUsage", 
    "path":"used"
}'
{"request":{"path":"used","mbean":"java.lang:type=Memory","attribute":"HeapMemoryUsage","type":"read"},
"value":69036712,"timestamp":1434075946,"status":200}
var j4p = new Jolokia({url: "http://127.0.0.1:8888/jolokia", fetchInterval: 1000});

var context = cubism.context()
    .serverDelay(0)
    .clientDelay(0)
    .step(1000)
    .size(594);
var jolokia = context.jolokia(j4p);

var memory = jolokia.metric(
    function (resp1, resp2) {
        return Number(resp1.value) / Number(resp2.value);
    },
    {type:"read", mbean:"java.lang:type=Memory", attribute:"HeapMemoryUsage", path:"used"},
    {type:"read", mbean:"java.lang:type=Memory", attribute:"HeapMemoryUsage", path:"max"}, "Heap-Memory"
);
Accept:*/*
Accept-Encoding:gzip, deflate, sdch
Accept-Language:en-US,en;q=0.8
Access-Control-Request-Headers:accept, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
Host:127.0.0.1:8888
Origin:http://127.0.0.1:8080
Referer:http://127.0.0.1:8080/monitor/
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36

javascript收到的响应标头

Allow:GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH
Cache-Control:no-cache, no-store, max-age=0, must-revalidate
Content-Length:0
Date:Fri, 12 Jun 2015 02:27:17 GMT
Expires:0
Pragma:no-cache
Server:Jetty(9.2.10.v20150310)
X-Content-Type-Options:nosniff
X-Frame-Options:DENY
X-XSS-Protection:1; mode=block

如上面所见,根本没有'Access-Control-Allow-Origin'标头。

共有1个答案

司寇飞航
2023-03-14

默认情况下,Jolokia允许任何跨源访问。因此根本不需要jolokia-access.xml

另一方面,我认为你的模式应该行得通。但是请在GitHub上提出一个问题,这样我们就可以继续解决这个问题。

 类似资料:
  • 我很难强制S3在它从一个bucket返回的所有对象上设置CORS头,尽管启用了CORS,但由于客户端S3上传正在工作,返回的对象没有CORS头! 我启用的策略是: 对象URL示例https://s3.amazonaws.com/captionable/meme/test 有人知道怎么了吗?

  • 问题内容: 我已经集成了带角度应用程序的按键斗篷。基本上,前端和后端都在不同的服务器上。后端应用程序在Tomcat 8上运行。前端应用程序在JBoss欢迎内容文件夹上运行。 角度配置 请求标题 Web控制台错误。 后端的Cors筛选器 问题答案: 我与KeyCloak和CORS以及所有这些都进行了大约两个星期的斗争,这是我的解决方案(针对keycloak 3.2.1): 这全部与配置KeyCloa

  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • 问题内容: 我陷入了API网关问题,并且在AWS论坛上浏览了所有其他SO解答,并通过了他们的文档,但仍然不满意。 我正在尝试使用AWS API网关设置API,该API调用Lambda函数,该函数读取/写入DynamoDB中的表。 DynamoDB的Lambda函数正在运行。我已经在AWS中创建了一个API,并为其创建了GET和OPTIONS方法。我读到AWS并没有仅对GET / POST强制执行O

  • Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?