O Springboot resolve o domínio cruzado do Ajax para sua referência. O conteúdo específico é o seguinte
1. O primeiro método
1. Escreva uma configuração que suporta solicitações de domínio cruzado
importar org.springframework.context.annotation.configuration; importar org.springframework.web.servlet.config.annotation.corsregistry; importar org.springframework.web.servlet.config.annotation.webmvcconfigureRadAdraad; Levin * @Time 2017-07-13 */ @ConfigurationPublic Class corsConfig estende webmvcConfigureRAdApter {estática final da string Origins [] = new String [] {"Get", "Post", "Put", Delete "}; @Override public void AddCorsMappings (CORSREGISTISTRE Registry) {Registry.addmapping ("/**"). ALMITHORIGINS ("*"). AllowCredentials (true) .AlowEdMethods (Origins) .Maxage (3600); }}2. Interface de solicitação HTTP
@RestControllerPublic Classe Hellocontroller {@AUTOWIRED HELLOSERVICE HELLOSERVICE; @GetMapping (value = "/test", produz = mediatype.application_json_utf8_value) public string query () {return "hello"; }}2. O segundo método (recomendado)
PS: O primeiro tipo tem um problema. Quando o servidor lança 500, ainda há um problema de domínio cruzado.
@SpringbooTApplication@componentscan@EnablediscoveryclientPublic Class ManagementApplication {public static void main (string [] args) {springApplication.run (gerenciamentopplication.class, args); } private corsConfiguration BuildConfig () {corsConfiguration corsConfiguration = new corsConfiguration (); corsConfiguration.addallowEDorigin ("*"); corsConfiguration.addallowEdHeader ("*"); corsConfiguration.addallowEdMethod ("*"); corsConfiguration.adDexposedHeader (httpheaderconstant.x_total_count); retornar corsConfiguration; } / ** * filtro de domínio cruzado * * @return * / @Bean público corsfilter corsfilter () {urlbasedCorsConfigurationsource Source = new UrlBasedCorsConfigurações fonte.ReGisterCorsConfiguration ("/**", BuildConfig ()); // 4 Retorne o novo corsfilter (fonte); }}2. Index.html
<!DOCTYPE html><html><head><meta charset="utf-8"><title>Cross-domain request</title><script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"></script><script>$(document).ready(function(){ $ ("Button"). Clique em (function () {$ .ajax ({url: "http: // localhost: 8080/teste", sucesso: function (resultado) {$ ("#P1"). Conteúdo </botão> </body> </html>3. A terceira maneira é escrever um filtro de filtro
pacote com.cci.market.common.filter; importar java.io.ioexception; importar javax.servlet.filter; importar javax.servlet.filterchain; importar javax.Servlet.FilterConfig; Immon Javax.Servlet.ServLeTexception; importação.FilterConfig; Import.Servlet.Servlet.ServLeTException; Importlet.FilterConsless; javax.servlet.servletResponse; importar javax.servlet.http.httpServletResponse; importar org.springframework.tereotype.component;/** * lidar com os problemas de cross-domain * @author Mr.zheng * @date 2016/08/08 */componente init (filterConfig filterConfig) lança servletexception {} @Override public void Dofilter (servletRequest req, servletResponse res, cadeia de filtro) lança IoException, servletexception {httpServletResponse Response = (httPServEstoSonsonsons); Response.setheader ("Access-Control-Alow-Origin", "*"); Response.setheader ("Access-Control-Arn-Methods", "Publique, obtenha, opções, excluir, colocar"); Response.setheader ("Access-Control-Max-Iage", "3600"); Response.setheader ("Access-Control-Alow-headers", "x-requestado com"); Chain.Dofilter (req, res); } @Override public void Destroy () {// TODO Method Stub}}}4. Configuração de domínio cruzado nginx
O domínio cruzado Nginx também é relativamente simples, basta adicionar a seguinte configuração.
localização/{proxy_pass http: // localhost: 8080; if ($ request_method = 'options') {add_header 'Access-Control-Allow-origin' '*'; add_header 'Access-Control-arel-metods' 'Get, Post, Opções'; add_header 'Access-Control-Alow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requestado com, se modificado-um controle de cache, tipo conteúdo, faixa de conteúdo, alcance, token'; add_header 'Access-Control-Max-Iage' 1728000; add_header 'content-type' 'texto/simples; charset = utf-8 '; add_header 'content-length' 0; retornar 204; } if ($ request_method = 'post') {add_header 'access-control-allow-origin' '*'; add_header 'Access-Control-arel-metods' 'Get, Post, Opções'; add_header 'Access-Control-Alow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requestado com, se modificado-um controle de cache, tipo conteúdo, faixa de conteúdo, alcance, token'; Add_Header 'Access-Control-expospos-cabeças' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-requestado com, se modificado-um controle de cache, tipo conteúdo, alcance de conteúdo, token'; } if ($ request_method = 'get') {add_header 'access-control-allow-origin' '*'; add_header 'Access-Control-arel-metods' 'Get, Post, Opções'; add_header 'Access-Control-Alow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requestado com, se modificado-um controle de cache, tipo conteúdo, faixa de conteúdo, alcance, token'; Add_Header 'Access-Control-expospos-cabeças' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-requestado com, se modificado-um controle de cache, tipo conteúdo, alcance de conteúdo, token'; }}Onde: Add_header 'Access-Control-Expose-headers' Certifique-se de adicionar o cabeçalho que você trouxe quando solicitar. Por exemplo, o "token" neste exemplo é realmente transmitido do front -end para o back -end. Não importa se você não consegue se lembrar, o depurador do navegador terá instruções detalhadas.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.