Spring boot REST APIを用いて機能を構築しております。
GETは呼び出せる状態なのですが、POSTやPUTがサーバーを呼び出すことが出来ずに躓いております。
呼び出せない原因として『@CrossOrigin』が影響していることは突き止めました。
『@CrossOrigin』を外すことでPOST、PUTが呼び出せることを確認することが出来たためです。
なぜ、設定していると呼び出せないのか分からないためご教授いただければ幸いです。
Talend APIを利用し確認を行っております。
下記の形でsendしております。
http://localhost:8080/api/product/post HEADERS Content-Type:application/json
コードは以下になります。
java
1@RestController 2@RequestMapping("api") 3@CrossOrigin(origins = {"xxx"}) 4public class RestApi extends HttpServlet { 5 @GetMapping("/product/get") 6 public JsonEntity getProduct(@RequestParam(name = "id", required = true) Integer id 7 ) throws IOException { 8 ~省略~ 9 } 10 11 @RequestMapping(value="/product/post", method = RequestMethod.POST, consumes = "application/json") 12// @RequestMapping(value="/product/post") 13// @RequestMapping(method = RequestMethod.POST) 14// @PostMapping("/product/post") 15// @ResponseBody 16 public JsonEntity postProduct() throws IOException { 17 ~省略~ 18 } 19 20}
java
1 @Override 2 public void configure(HttpSecurity http) throws Exception{ 3 http 4 .authorizeRequests() 5 .antMatchers("/webjars/**").permitAll() 6 .antMatchers("/css/**").permitAll() 7 .antMatchers("/login").permitAll() 8 .antMatchers("/signup").permitAll() 9 .antMatchers("/rest/**").permitAll() 10 .antMatchers("/api/**").permitAll() 11 .antMatchers("/admin").hasAuthority("ROLE_ADMIN") 12 .anyRequest().authenticated(); 13 14 RequestMatcher csrfMatcher = new RestMatcher("/api/**"); 15 16 http.csrf().requireCsrfProtectionMatcher(csrfMatcher);
追記
HTTP
1POST /api/product/post HTTP/1.1 2Content-Length: 0 3Content-Type: application/json 4Host: localhost:8080 5 6HTTP/1.1 403 7Vary: Origin 8Vary: Access-Control-Request-Method 9Vary: Access-Control-Request-Headers 10X-Content-Type-Options: nosniff 11X-XSS-Protection: 1; mode=block 12Cache-Control: no-cache, no-store, max-age=0, must-revalidate 13Pragma: no-cache 14Expires: 0 15X-Frame-Options: DENY 16Transfer-Encoding: chunked 17Date: Wed, 24 Mar 2021 04:56:33 GMT 18Keep-Alive: timeout=60 19Connection: keep-alive 20[message-body; type: "application/octet-stream", size: 20 bytes]
回答1件
あなたの回答
tips
プレビュー