SpringBoot resuelve AJAX Cross Dominio para su referencia. El contenido específico es el siguiente
1. El primer método
1. Escriba una configuración que admita las solicitudes de dominio cruzado
importar org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.corsregistry; import og.springframework.web.servlet.config.annotation.webmvcconfigurerAdapter;/*** manejar problemas de cruzado con aJax. @Time 2017-07-13 */ @ConfigurationPublic Class CorSconfig extiende WebMVCConfigurerAdapter {static final string orientins [] = new String [] {"get", "post", "put", "delete"}; @Override public void addCorsMappings (Registro de Corsregistry) {Registry.AddMapping ("/**"). PermitidoRigins ("*"). PEDITCREDENTALLESS (verdadero). AllownMethods (Origins) .Maxage (3600); }}2. Interfaz de solicitud HTTP
@RestControllerPublic Class Hellocontroller {@aUtowired HelloService HelloService; @GetMapping (valor = "/test", produce = Mediatype.application_json_utf8_value) public String Query () {return "Hello"; }}2. El segundo método (recomendado)
PD: El primer tipo tiene un problema. Cuando el servidor lanza 500, todavía hay un problema de dominio cruzado.
@Springbootapplication@componentscan@habilitedScoveryClientPublic Class ManagementApplication {public static void main (String [] args) {springApplication.run (gestionApplication.class, args); } private corsconfiguration buildConfig () {corsconfiguration corsconfiguration = new corsconfiguration (); corsconfiguration.addallowedorigin ("*"); corsconfiguration.addallowedheader ("*"); corsconfiguration.addallowedmethod ("*"); CorsConfiguration.AddExposedheader (httpheaderConstant.x_total_count); regresar corsconfiguration; } / ** * Filtro de dominio cruzado * * @return * / @bean public corsfilter corsfilter () {urlBasedCorsConfigurationsource fuente = new UrlBasedCorsConfigurationSource (); Source.RegisterSConfiguration ("/**", buildConfig ()); // 4 devolver nuevo Corsfilter (fuente); }}2. Index.html
<! Doctype html> <html> <fead> <meta charset = "utf-8"> <title> solicitud de intermediario </title> <script src = "https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js"> </script> <cript> $ (documento). $ ("botón"). Click (function () {$ .AJAX ({url: "http: // localhost: 8080/test", éxito: function (resultado) {$ ("#p1"). html (resultado);}}});});}); </script> </head> <body <p id = "p1"> </p> <p> Contenido </boton> </body> </html>3. La tercera forma es escribir un filtro de filtro
paquete com.cci.market.common.filter; import java.io.ioexception; import javax.servlet.filter; import javax.servlet.filterchain; import javax.servlet.filterConfig; import javax.servlet.servletException; import javax.servlet.servletRequest; import; import javax.servlet.servletResponse; import javax.servlet.http.httpservletResponse; import org.springframework.stereotype.component;/** * problemas de implementos de dominio cruzado * @author mr.zheng * @date 2016/08/08 * */ @componentpublicte de origen de origen Filtro Init (FilterConfig FilterConfig) lanza ServletException {} @Override public void dofilter (ServLetRequest Req, ServLetResponse Res, FilterChain Chain) lanza IOException, servletException {httpservletResponse respuesta = (httpServletResponse) res; Respuesta.setheader ("Access-Control-Allow-Origin", "*"); Respuesta.setheader ("Access-Control-Allow-Methods", "Publicar, obtener, opciones, eliminar, poner"); respuesta.setheader ("Access-Control-Max-Age", "3600"); Respuesta.Setheader ("Access-Control-Allow-Headers", "X-solicitado con"); Chain.dofilter (req, res); } @Override public void destruye () {// TODO Auto Generado Método STUB}}4. Configuración de dominio de Nginx
Nginx Cross Dominio también es relativamente simple, solo agregue la siguiente configuración.
ubicación/{proxy_pass http: // localhost: 8080; if ($ request_method = 'options') {add_header 'Access-Control-Allow-Origin' '*'; add_header 'Access-Control-Allow-Methods' 'Get, Publica, Opciones'; add_header 'Access-Control-Allow-Headers' DNT, X-Customheader, Keep-Alive, User-Agent, X-Requested-with, si modificó, y-Control, tipo de contenido, rango de contenido, rango, token '; add_header 'Access-Control-Max-Age' 1728000; Add_header 'Content-type' 'Text/Plain; charset = utf-8 '; add_header 'Content-longitud' 0; regresar 204; } if ($ request_method = 'post') {add_header 'access-confontrol-allow-oreGin' '*'; add_header 'Access-Control-Allow-Methods' 'Get, Publica, Opciones'; add_header 'Access-Control-Allow-Headers' DNT, X-Customheader, Keep-Alive, User-Agent, X-Requested-with, si modificó, y-Control, tipo de contenido, rango de contenido, rango, token '; dnt, X-Customheader, X-Customheader, ALIVE, agente de usuario, agente de usuarios, con requisitos de exposición, si-Modificado, con control de contenido, rango de contenido, rango de contenido, rango '; } if ($ request_method = 'get') {add_header 'access-confontrol-allow-oreGin' '*'; add_header 'Access-Control-Allow-Methods' 'Get, Publica, Opciones'; add_header 'Access-Control-Allow-Headers' DNT, X-Customheader, Keep-Alive, User-Agent, X-Requested-with, si modificó, y-Control, tipo de contenido, rango de contenido, rango, token '; dnt, X-Customheader, X-Customheader, ALIVE, agente de usuario, agente de usuarios, con requisitos de exposición, si-Modificado, con control de contenido, rango de contenido, rango de contenido, rango '; }}Dónde: add_header 'Access-Control-Expose-Headers' Asegúrese de agregar el encabezado que trajo cuando lo solicitó. Por ejemplo, el "token" en este ejemplo en realidad se transmite desde la parte delantera hasta el extremo trasero. No importa si no puede recordarlo, el depurador del navegador tendrá instrucciones detalladas.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.