2016-07-20 18 views
1

Ich habe eine neue und einfache Spring MVC-Anwendung erstellt (4.2.1.Release verwendet, jetzt auf 4.2.7.Release geschaltet). Die App ist einfach:Frühling MVC 4.2 + CORS Rückkehr 403

Web.xml:

<servlet> 
     <servlet-name>proxy</servlet-name> 
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
    <load-on-startup>1</load-on-startup> 

    <init-param> 
     <param-name>dispatchOptionsRequest</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath*:my-cool-context.xml</param-value> 
    </init-param>   
</servlet> 
<servlet-mapping> 
    <servlet-name>proxy</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 

Kontext:

<context:component-scan base-package="my.supercool.company.app"/> 
<mvc:cors> 
    <mvc:mapping path="/**" allowed-methods="POST, OPTIONS" /> 
</mvc:cors> 

Und der Controller

@Controller 
@RequestMapping("/") 
@CrossOrigin 
public class MySupercoolController { 
    @CrossOrigin 
    @RequestMapping(path="test", method = RequestMethod.POST) 
    @ResponseBody 
    private ResponseEntity<String> executePostProxy(HttpServletRequest request){ 
     return new ResponseEntity<String>("TEST", HttpStatus.OK); 
    } 
} 

jetzt - der Controller selbst arbeitet und gibt meinen Text , so wird der Controller in den Kontext geladen. Die PreflightRequest-Anforderung für diesen Endpunkt erhält jedoch die Forbidden-Antwort 403, und die CORS-Antwortheader sind nicht festgelegt. Ich verwende JBOSS, aber ich habe überprüft, dass die OPTIONS-Anfrage zu Spring gelangt (die FrameworkServlet-doOptions-Methode wird ausgeführt, über Debugger überprüft). Gibt es noch etwas, das ich im Frühjahr MVC für CORS konfigurieren sollte?

BTW Der Kontext CORS Config und Annotation config - Ich habe versucht, damit es funktioniert, also versuchte ich mit XML, Anmerkungen und beiden.

+0

'allowed-Methoden = "GET, PUT"' 'vs. @RequestMapping (path = "test", method = RequestMethod.POST)' – zeroflagL

+0

@zeroflagL änderte es, half nicht :( – maslan

+0

@zeroflagL Ich löschte auch die mvc: cors aus dem XML und verließ nur die Annotationen. Hat auch nicht geholfen – maslan

Antwort

1

Es scheint, dass dies auch notwendig:

@Configuration 
@EnableWebMvc 
public class WebConfig extends WebMvcConfigurerAdapter { 
    @Override 
    public void addCorsMappings(CorsRegistry registry) { 
     registry.addMapping("/**"); 
    } 
}