Весенняя загрузка AngularJs $ http.get пуста - PullRequest
0 голосов
/ 04 марта 2019

Я создаю монитор ресурсов, который получает типичную информацию о машине в другом домене, но с тем же портом.При непосредственном доступе к URL данные возвращаются успешно.Однако, если мы попробуем это с помощью angularJ, запрос $ http.get вернет сообщение «заблокировано политикой CORS: заголовок« Access-Control-Allow-Origin »отсутствует в запрашиваемом ресурсе».Мы решили использовать хромовое расширение CORS, чтобы разрешить соединение.Единственная проблема - теперь запрос $ http.get всегда пуст, несмотря на существующие данные.Не уверен, почему это происходит, поскольку ошибка не возникает.

Угловой контроллер

app.controller("ServerResourcesController", [ "$scope", "$http", function($scope, $http) {

     $http.get("http://000.000.0.0:8080/testing")
    .then(function(data){
        console.log(data);
        })
}]);

Контроллер

@RestController
public class ServerRestController {

    Logger logger = LoggerFactory.getLogger(ServerRestController.class);
    ServerQueryController sqc = new ServerQueryController();

    @RequestMapping("/server-service-info")
    public String ServiceInfo() {//Welcome page, non-rest
        return "Server Resource Monitor Service";
    }

    //rest end point
    @GetMapping("/server-resources-info")
    public ServerInformation ServerInformation() {
        ServerInformation serverInformation = sqc.CurrentServerResourceInformation();
        return serverInformation;
    }
    }

Класс объекта

@Getter @Setter
@JsonIgnoreProperties(ignoreUnknown = true)
public class ServerInformation {

    private String name;
    private String ipAddress;
    private double systemCpuLoad;
    private double freePhysicalMemory;
    private double totalPhysicalMemory;
    private String operatingSystem;
    private double freeDiskSpace;
    private double diskUsage;

    public ServerInformation() {

    }

    @Override
    public String toString() {
        return "Values{ systemCpuLoad: "+systemCpuLoad+
                ", freePhysicalMemory: "+freePhysicalMemory+
                ", totalPhysicalMemory: "+totalPhysicalMemory+
                ", operatingSystem: "+operatingSystem+
                ", freeDiskSpace: "+freeDiskSpace+
                ", diskUsage: "+diskUsage+
                " }";
    }

}

1 Ответ

0 голосов
/ 04 марта 2019

Кажется, ваш ServerRestController должен иметь перекрестное происхождение, добавьте это

@RestController
@CrossOrigin(origins = "*")
public class ServerRestController {
...
}

Также, если вы хотите разрешить конкретное происхождение, вы можете сделать это следующим образом:

@CrossOrigin(origins = "http://stackoverflow.com", maxAge = 3600)

Вы можете установить @CrossOrigin с разрешением происхождения и максимальным возрастом либо для каждого метода, либо для RestController.

Более того, если у вас несколько RestController, не рекомендуется писать@CrossOrigin на каждом контроллере вы можете просто создать Filter следующим образом:

@Component
public class SimpleCORSFilter implements Filter {

private final Logger log = LoggerFactory.getLogger(SimpleCORSFilter.class);

public SimpleCORSFilter() {
    log.info("SimpleCORSFilter init");
}

@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;

response.setHeader("Access-Control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Requested-With, remember-me");

chain.doFilter(req, res);
}

@Override
public void init(FilterConfig filterConfig) {
}

@Override
public void destroy() {
}

}

См. Пример здесь: пружинные сердечники

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...