13693261870
2024-12-30 edc9a6674eb9b40e33a74c5f022d279712ed3b7c
se-modules/se-system/src/main/java/com/se/system/service/NacosService.java
@@ -1,12 +1,10 @@
package com.se.system.service;
import com.alibaba.fastjson.JSONObject;
import com.se.system.domain.vo.NacosConfigVo;
import com.se.system.utils.CaffeineUtils;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.ResponseEntity;
import org.springframework.http.*;
import org.springframework.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
@@ -16,6 +14,7 @@
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.lang.reflect.Field;
import java.util.Map;
@Component
@@ -35,16 +34,16 @@
    final static String key = "nacos:login:token";
    private String getToken() {
    private String getToken() throws Exception {
        Object obj = CaffeineUtils.get(key);
        if (obj instanceof String) {
            return (String) obj;
        }
        String token = login();
        if (null != token) {
            CaffeineUtils.put(key, token);
        }
        if (null == token) throw new Exception("Nacos令牌为空");
        CaffeineUtils.put(key, token);
        return token;
    }
@@ -66,9 +65,8 @@
    public void getNacosConfig(String dataId, HttpServletRequest req, HttpServletResponse res) throws Exception {
        String token = getToken();
        if (null == token) throw new Exception("Nacos令牌为空");
        String url = "http://" + serverAddr + "/nacos/v1/cs/configs?dataId=se-system-dev.yml&group=&appName=&pageNo=1&pageSize=10&search=accurate";
        // String url = "http://" + serverAddr + "/nacos/v1/cs/configs?dataId=" + dataId + "&group=&appName=&pageNo=1&pageSize=10&search=accurate";
        String url = "http://" + serverAddr + "/nacos/v1/cs/configs?dataId=" + dataId + "&group=DEFAULT_GROUP&namespaceId=&tenant=&show=all&username=";
        HttpHeaders headers = new HttpHeaders();
        headers.set("accessToken", token);
@@ -82,4 +80,43 @@
        out.flush();
        out.close();
    }
    public void updateNacosConfig(NacosConfigVo vo, HttpServletRequest req, HttpServletResponse res) throws Exception {
        if (null == vo || null == vo.getId() || null == vo.getDataId() || null == vo.getContent())
            throw new Exception("NacosConfigVo数据不正确");
        String token = getToken();
        vo.setModifyTime(System.currentTimeMillis());
        //vo.setMd5(StringUtils.md5(vo.getContent()));
        String url = "http://" + serverAddr + "/nacos/v1/cs/configs?username=" + username;
        HttpHeaders headers = new HttpHeaders();
        // headers.setContentType(MediaType.APPLICATION_JSON);
        // headers.setContentType(new MediaType("application", "json", StandardCharsets.UTF_8));
        headers.setContentType(MediaType.valueOf("application/x-www-form-urlencoded"));
        headers.set("accessToken", token);
        headers.set("casMd5", vo.getMd5());
        MultiValueMap<String, Object> map = createMap(vo);
        HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(map, headers);
        ResponseEntity<String> re = restTemplate.exchange(url, HttpMethod.POST, entity, String.class);
        res.setContentType("application/json;charset=UTF-8");
        PrintWriter out = res.getWriter();
        out.print(re.getBody());
        out.flush();
        out.close();
    }
    private <T> MultiValueMap<String, Object> createMap(T t) throws Exception {
        MultiValueMap<String, Object> map = new LinkedMultiValueMap<>();
        Field[] fields = t.getClass().getDeclaredFields();
        for (Field field : fields) {
            field.setAccessible(true);
            map.add(field.getName(), field.get(t));
        }
        return map;
    }
}