análise
- Abra o console e encontre esta mensagem de erro:
foi bloqueado pela política CORS: O cabeçalho 'Access-Control-Allow-Origin' co…
- E a obtenção direta tem dados, indicando que o servidor está normal
- Use o navegador f12 para capturar pacotes e descobrir que a solicitação assíncrona ajax do navegador não obtém os dados JSON da resposta do servidor
- Com o parâmetro copy ajax assynchronous request address, coloque-o diretamente no navegador e pressione Enter. Constatou-se que os dados json foram respondidos com sucesso
- Usando um violinista profissional para capturar o pacote, descobri que o servidor de solicitação de postagem assíncrona ajax respondeu aos dados json, mas não no navegador.
- Pode-se concluir que o navegador bloqueou os dados de resposta do servidor
Solução
doFilter()
Defina o cabeçalho de resposta no filtro do lado do servidor para resolver o problema de dados do navegador que protege as respostas de solicitação de domínio cruzado
HttpServletResponse response = (HttpServletResponse) servletResponse;
HttpServletRequest request = (HttpServletRequest) servletRequest;
//http://xxx.xxx.xxx.xxx是你的前端地址 不是80端口有端口请设置端口http://xxx.xxx.xxx.xxx:端口号
response.setHeader("Access-Control-Allow-Origin","http://xxx.xxx.xxx.xxx");
response.setHeader("Access-Control-Allow-Credentials","true");
filterChain.doFilter(request, response);
Nota
http://xxx.xxx.xxx.xxx
É http://xxx.xxx.xxx.xxx:80
diferente do navegador. Se sua porta front-end for a porta 80, não http://xxx.xxx.xxx.xxx
adicione a porta 80 atrás, use-a diretamentehttp://xxx.xxx.xxx.xxx