springmvc 차단기 가 ajax () 에 요청 한 특수 요청 헤드 처리

ajax 발송 원리, ajax 는 먼저 OPTIONS (예비 요청, 관련 메 시 지 를 되 돌려 쓰 면 요청 이 성공 하고 예비 요청 이 파 라 메 터 를 얻 지 못 함) 예비 요청 을 성공 적 으로 보 낸 후에 야 다음 의 진정한 요청 을 보 낼 수 있 습 니 다.
       한편, 브 라 우 저 는 보안 을 고려 하여 JS 가 크로스 오 버 요청 을 하 는 것 을 제 한 했 습 니 다. XHR 대상 을 사용 하여 요청 을 하려 면 같은 소스 정책 (SOP: Same Origin Policy) 을 따라 야 합 니 다. 크로스 오 버 요청 서버 가 되 돌아 오 는 데 이 터 는 브 라 우 저 에서 차단 되 어야 합 니 다.
     따라서 차단기 에 서 는 크로스 필드 허용 설정, response. setHeader ("Access - Control - Allow - Origin", "*"), response. setHeader ("Access - Control - Allow - Methods", "PUT, POST, GET, DELETE, OPTIONS") 를 해 야 합 니 다.허 용 된 방법 을 설정 하 다.
        특별한 요청 헤더 라면 허용 되 는 요청 헤 더 를 설정 해 야 합 니 다. 그렇지 않 으 면 실제 요청 을 보 내 면 브 라 우 저 보고 가 잘못 되 었 습 니 다.
request header field xxxxxx is not allowed by Access-Control-Allow-Header【chrome】,
따라서 특수 요청 헤드 를 설정 하려 면 response. setHeader ("Access - Control - Allow - Headers", "Cpp Authorization, Cpp Reuqest * *") 를 설정 해 야 합 니 다.
장면 을 사용 하려 면 특수 헤드 정보 와 파 라 메 터 를 가 져 와 서 검 사 를 해 야 합 니 다. 검사 에 성공 하면 인터페이스 에 들 어 갑 니 다. 그렇지 않 으 면 차단 합 니 다. 서버 가 허용 하 는 도 메 인, 허용 하 는 헤드 정 보 를 설정 하고 사전 요청 여 부 를 판단 합 니 다. 만약 에 사전 요청 에 202 상 태 를 설정 하고 다시 쓰 면 ajax 가 실제 요청 을 보 내 서 필요 한 파 라 메 터 를 가 져 와 차단 처 리 를 합 니 다.  
잔말 말고 코드:
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        log.info("     ");
        
        response.setCharacterEncoding("UTF-8");
        response.setContentType("application/json;charset=utf-8");
        String method = request.getMethod();
        response.setHeader("Access-Control-Allow-Origin", "*");//      
        response.setHeader("Access-Control-Allow-Headers", "Cpp_Authorization,Cpp_Reuqest_***"); //    header    ,Content-Type             
        response.setHeader("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");
        if(method.equals("OPTIONS")){
            log.info("  options  ");
            try{
                //          ajax            
                response.setStatus(202);
                response.getWriter().write(1);
                return false;
            }catch (Exception e){
                log.info(e);
                return false;
            }
        }else{
           String header =  request.getHeader("someHeader");//    header
          //                
                if(dosomething(map,header))){
                    return true;
                }
            }
            //           
            return false;
        }
    }

좋은 웹페이지 즐겨찾기