SpringBoot는 참조를 위해 Ajax Cross-Domain을 해결합니다. 특정 내용은 다음과 같습니다
1. 첫 번째 방법
1. 크로스 도메인 요청을 지원하는 구성을 작성하십시오
import org.springframework.context.annotation.configuration; import org.springframework.web.servlet.config.annotation.corsregistry; import org.spramframework.web.servlet.config.annotation.webmvcconfigureradapter;/** ** ** ajax의 문제를 처리합니다. @Time 2017-07-13 */ @configurationPublic Class CorsConfig 확장 webmvcconfigureradapter {static final String origins [] = new String [] { "get", "post", "put", "delete"}; @override public void addcorsmappings (corsregistry registry) {registry.addmapping ( "/**"). allendorigins ( "*"). allingcredentials (true) .hallowedMethods (Origins) .maxage (3600); }}2. HTTP 요청 인터페이스
@RestControllerPublic 클래스 HelloController {@autowired HelloService HelloService; @GetMapping (value = "/test", produces = mediaType.Application_json_utf8_value) public String query () {return "Hello"; }}2. 두 번째 방법 (권장)
추신 : 첫 번째 유형에는 문제가 있습니다. 서버가 500을 던지더라도 여전히 도메인 크로스 메신스 문제가 있습니다.
@springbootApplication@componentscan@enablediscoveryClientPublic Class ManagementApplication {public static void main (String [] args) {springApplication.Run (manageApplication.class, args); } private corsConfiguration buildConfig () {corsConfiguration corsConfiguration = new CorsConfiguration (); corsconfiguration.addallowedorigin ( "*"); corsconfiguration.addallowedHeader ( "*"); corsconfiguration.addallowedMethod ( "*"); CorsConfiguration.AdDexpiteHeader (httpheaderconstant.x_total_count); CorsConfiguration 리턴; } / ** * 크로스 도메인 필터 * * @return * / @bean public corsfilter corsfilter () {urlbasedCorsConfigUrationSource 소스 = new urlBasedCorsConfigUrationSource (); source.registercorsconfiguration ( "/**", buildConfig ()); // 4 새로운 Corsfilter (소스)를 반환합니다. }}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"> $ ( "button"). click (function () {$ .ajax (url : "url :"http : // localhost : 8080/test ", success : function (result) {$ ("#p1 "). html (결과);});});});});});}); 내용 </button> </body> </html>3. 세 번째 방법은 필터 필터를 작성하는 것입니다.
package 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.servletrequert; javax.servlet.servletresponse; import javax.servlet.servlet.http.httpservletresponse; import org.spramework.stereotyp.component;/** * 크로스 도메인 문제 핸들 * @author mr.zheng * @date 2016/08/08 * */ @componentpublic classfilter filter empletter empletment emplement emplements emplements emplicate emplement emplements emplicate emplicate emplicate emplicate emplicate emplicate emplicat emplicate emplicate hross-domain 문제 *. init (filterconfig filterconfig) servletexception {}} @override public void dofilter (servletrequest req, servletreponse res, filterchain 체인)는 ioexception, servletexception {httpservletrepsonge responsk = (httpservletResponse); Response.SetHeader ( "액세스-제어-홀로-오리 린", "*"); Response.SetHeader ( "Access-Control-Alalk-Methods", "Post, Get, Options, Delete, Put"); Response.SetHeader ( "Access-Control-Max-AGE", "3600"); Response.SetHeader ( "Access-Control-Hallow-Headers", "X- recested-With"); Chain.dofilter (req, res); } @override public void destroy () {// todo 자동 생성 메소드 스텁}}4. Nginx 크로스 도메인 구성
Nginx 크로스 도메인도 비교적 간단합니다. 다음 구성 만 추가하십시오.
위치/{proxy_pass http : // localhost : 8080; if ($ request_method = '옵션') {add_header 'Access-Control-Ollow-Origin'*'; add_header 'Access-Control-Allow-Methods' 'Get, Post, Options'; Add_header 'Access-Control-Hallow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, if-modified-since, Cache-Control, Content-Type, Content-Range, 범위, 토큰; add_header 'Access-Control-Max-Age'1728000; add_header 'Content-Type' '텍스트/일반; charset = utf-8 '; add_header 'Content-Length'0; 반환 204; } if ($ request_method = 'post') {add_header 'access-control-allow-origin'*'; add_header 'Access-Control-Allow-Methods' 'Get, Post, Options'; Add_header 'Access-Control-Hallow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, if-modified-since, Cache-Control, Content-Type, Content-Range, 범위, 토큰; add_header 'Access-Control-Expose-Headers' 'DNT, X-CustomHeader, Keep-alive, 사용자 에이전트, X- 수수료, IF 모듈 식, 캐시 제어, 콘텐츠 유형, 콘텐츠 범위, 범위, 토큰'; } if ($ request_method = 'get') {add_header 'access-control-allow-origin'*'; add_header 'Access-Control-Allow-Methods' 'Get, Post, Options'; Add_header 'Access-Control-Hallow-Headers' 'DNT, X-CustomHeader, Keep-Alive, User-Agent, X-Requested-With, if-modified-since, Cache-Control, Content-Type, Content-Range, 범위, 토큰; add_header 'Access-Control-Expose-Headers' 'DNT, X-CustomHeader, Keep-alive, 사용자 에이전트, X- 수수료, IF 모듈 식, 캐시 제어, 콘텐츠 유형, 콘텐츠 범위, 범위, 토큰'; }}여기 : Add_header 'Access-Control-Expose-Headers'는 요청했을 때 가져온 헤더를 추가해야합니다. 예를 들어,이 예제의 "토큰"은 실제로 프론트 엔드에서 백엔드로 전송됩니다. 당신이 그것을 기억할 수 없다면 상관없이 브라우저의 디버거에는 자세한 지침이 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.