Cross-Origin Request Blocked Spring REST service + AJAX

前端 未结 3 969
闹比i
闹比i 2021-01-02 18:21

Unable to call spring REST service

My spring service

@RequestMapping(value = \"/MAS/authenticate\", method = RequestMethod.POST)
public ResponseEnti         


        
3条回答
  •  臣服心动
    2021-01-02 19:01

    My AJAX call and service were OK. After searching a lot on internet i have found that its server side problem not client side.

    on server side with Spring we have to implement filter which will allow CORS requests.

    filter will look like this.

    import java.io.IOException;
    
    import javax.servlet.FilterChain;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.web.filter.OncePerRequestFilter;
    
    public class CORSFilter extends OncePerRequestFilter {
        private static final Log LOG = LogFactory.getLog(CORSFilter.class);
    
        @Override
        protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
    
            response.addHeader("Access-Control-Allow-Origin", "*");
            if (request.getHeader("Access-Control-Request-Method") != null && "OPTIONS".equals(request.getMethod())) {
                LOG.trace("Sending Header....");
                // CORS "pre-flight" request
                response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
                // response.addHeader("Access-Control-Allow-Headers", "Authorization");
                response.addHeader("Access-Control-Allow-Headers", "Content-Type");
                response.addHeader("Access-Control-Max-Age", "1");
            }
            filterChain.doFilter(request, response);
        }
    
    }
    

    and in web.xml apply this filter on your service requests like this

        
            cors
            com.test.common.controller.CORSFilter 
        
        
            cors
            /*
         
    

    This may help someone else who went through this problem. :)

提交回复
热议问题