java 설정은 전역 요청을 허용합니다

8167 단어

java 설정은 전역 요청을 허용합니다


전후단이 분리된 프로젝트는 전역 문제에 부딪히기 쉽다.

직접 부호:

@WebFilter("/*")
public class CORSFilter implements Filter {
    public CORSFilter() {
    }

    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
        //      
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) res;
        String[] allowDomains = {"http://www  1",http://www  2"};
        Set allowOrigins = new HashSet(Arrays.asList(allowDomains));
        String originHeads = request.getHeader("Origin");
        if(allowOrigins.contains(originHeads)){
            response.setHeader("Access-Control-Allow-Origin", originHeads);
            response.setHeader("Access-Control-Allow-Methods", "POST,GET,OPTIONS,DELETE,HEAD,PUT,PATCH");
            response.setHeader("Access-Control-Max-Age", "36000");
            response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,Authorization,authorization");
            response.setHeader("Access-Control-Allow-Credentials","true");
        }
        chain.doFilter(req, response);
    }

    public void init(FilterConfig fConfig) throws ServletException {
    }
}

설명:

  • 도메인 간 액세스를 구성하는 가장 간단한 방법은 와일드카드*를 사용하는 것입니다.(보안이 설정되지 않아 모든 요청이 도메인 간 액세스가 가능합니다) 코드는 다음과 같습니다.
  • response.setHeader("Access-Control-Allow-Origin","*");
    

    이런 방식이 불편한 점은 바로 전방 브라우저가 쿠키 정보를 가지고 갈 수 없다는 것이다(전방은 쿠키가 있는 요청 모드를 사용할 수 없다).
    response.setHeader("Access-Control-Allow-Origin","*");
    response.setHeader("Access-Control-Allow-Credentials","true");//     Ajax    Cookie
    

    서버측 Access-Control-Allow-Credentials = true일 경우 Access-Control-Allow-Origin 매개변수는'*'가 될 수 없습니다.그렇지 않으면 효과가 없다
  • 여러 개의 도메인 이름이 전역적으로 접근할 수 있도록 허용할 때 위의 방식에 따라 데이터 집합을 설정하면 된다.
  • 좋은 웹페이지 즐겨찾기