복붙노트

[SPRING] 웹 서비스에 Access-Control-Origin 허용

SPRING

웹 서비스에 Access-Control-Origin 허용

나는 같은 webservice가 :

@Controller
@RequestMapping("/")
public class ApplicationController {

    @RequestMapping(value="/Changes", method = RequestMethod.GET)
    public String inspect(ModelMap model) {
         model.addAttribute("msg", "example");

         return "index";
    }
}

링크 : "localhost : 8081 / ChangesPDF / Changes? ..."

링크에있는 Alfresco를 통해이 웹 서비스의 응답을 얻으려고합니다. "localhost : 8080 / share". 나는 지금 다른 포트를 가지고있다. (같은 포트를 가지고있을 때, 이것은 훌륭하게 작동한다.) 그래서 다른 포트에서 Alfresco에서 에러를 얻는다.

이 헤더를 어떻게 추가 할 수 있습니까?

해결법

  1. ==============================

    1."Access-Control-Allow-Origin"이 도메인 "localhost : 8081"(* 모두)을 허용하도록 설정하는 필터를 추가해야합니다.

    "Access-Control-Allow-Origin"이 도메인 "localhost : 8081"(* 모두)을 허용하도록 설정하는 필터를 추가해야합니다.

    아마 당신은 여기에 답변을 찾을 것입니다 cores-filter-not-working

    추가 설명 :

    먼저 필터 클래스 만들기

    public class CorsFilter implements Filter {
    
        private static final Logger log = Logger.getAnonymousLogger();
    
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}
    
        @Override
        public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            HttpServletRequest request = (HttpServletRequest) servletRequest;
    
            // can be moved to properties
            String[] allowDomain = {"localhost:8080","localhost:8081"};              
    
    
            String originHeader = request.getHeader("host");
    
            for(String domian : allowDomain){
    
                if(originHeader.endsWith(domian))
    
                response.setHeader("Access-Control-Allow-Origin", originHeader);
                break;
            }
            filterChain.doFilter(servletRequest, servletResponse);
    
        }
    
        @Override
        public void destroy() {}
    }
    

    web.xml 클래스에 매핑 추가

    <filter>
        <filter-name>cors</filter-name>
        <filter-class>full name of your filter class here</filter-class>
    </filter>
    
    <filter-mapping>
        <filter-name>cors</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    

    요구 사항에 따라 web.xml config에 URL pattren을 올바르게 정의해야합니다.

  2. ==============================

    2.Spring 4.2 이상을 사용하는 경우 @CrossOrigin 주석을 사용할 수 있습니다.

    Spring 4.2 이상을 사용하는 경우 @CrossOrigin 주석을 사용할 수 있습니다.

    @Controller
    @RequestMapping("/")
    public class ApplicationController {
    
        @CrossOrigin
        @RequestMapping(value="/Changes", method = RequestMethod.GET)
        public String inspect(ModelMap model) {
             model.addAttribute("msg", "example");
    
             return "index";
        }
    }
    

    그렇지 않으면 Spring 애플리케이션에 CORS 필터를 등록해야합니다. 이 같은.

  3. ==============================

    3.귀하의 코드는 Spring의 @CrossOrigin 주석을 사용해야 할 수도 있습니다 (예 :

    귀하의 코드는 Spring의 @CrossOrigin 주석을 사용해야 할 수도 있습니다 (예 :

    import org.springframework.web.bind.annotation.CrossOrigin;
    
    ....
    
    @Controller
    @RequestMapping("/")
    public class ApplicationController {
    
        @CrossOrigin
        @RequestMapping(value="/Changes", method = RequestMethod.GET)
        public String inspect(ModelMap model) {
            model.addAttribute("msg", "example");
    
            return "index";
        }
    }
    

    이렇게하면 모든 원산지가 허용되며 이는 귀하의 필요에 부응 할 수도 충분하지 않을 수도 있습니다.

    참고로, 나는이 기사에서 설명한 내용을 발견했으며 Spring 블로그에서 언급했다.

    희망이 도움이!

  4. from https://stackoverflow.com/questions/35672679/add-access-control-allow-origin-to-web-service by cc-by-sa and MIT license