1
13693261870
2024-12-30 fbca82f5994ec49092fb05bc236f0956fecd387c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package com.se.system.service;
 
import com.alibaba.fastjson.JSONObject;
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.stereotype.Component;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.client.RestTemplate;
 
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;
 
@Component
@SuppressWarnings("ALL")
public class NacosService {
    @Value("${spring.cloud.nacos.config.server-addr}")
    String serverAddr;
 
    @Value("${spring.cloud.nacos.username}")
    String username;
 
    @Value("${spring.cloud.nacos.password}")
    String password;
 
    @Resource
    RestTemplate restTemplate;
 
    final static String key = "nacos:login:token";
 
    private String getToken() {
        Object obj = CaffeineUtils.get(key);
        if (obj instanceof String) {
            return (String) obj;
        }
 
        String token = login();
        if (null != token) {
            CaffeineUtils.put(key, token);
        }
 
        return token;
    }
 
    private String login() {
        String url = "http://" + serverAddr + "/nacos/v1/auth/users/login";
 
        MultiValueMap<String, Object> map = new LinkedMultiValueMap();
        map.add("username", username);
        map.add("password", password);
 
        JSONObject obj = restTemplate.postForObject(url, map, JSONObject.class);
        if (null == obj || !obj.containsKey("accessToken")) {
            return null;
        }
 
        return obj.getString("accessToken");
    }
 
    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";
 
        HttpHeaders headers = new HttpHeaders();
        headers.set("accessToken", token);
 
        HttpEntity<Map<String, Object>> requestEntity = new HttpEntity<>(headers);
        ResponseEntity<String> re = restTemplate.exchange(url, HttpMethod.GET, requestEntity, String.class);
 
        res.setContentType("application/json;charset=UTF-8");
        PrintWriter out = res.getWriter();
        out.print(re.getBody());
        out.flush();
        out.close();
    }
}