Выборка Javascript и @RequestAttribute в Springboot - PullRequest
0 голосов
/ 08 октября 2018

У меня есть API аутентификации на сервере Springboot.Когда я вызываю API из POSTMAN, объект userDetails не является нулевым, и я получаю успех на стороне клиента.Тем не менее, когда я делаю из responseJS, объект userDetails имеет значение null, а сервер возвращает 500 с сообщением msg. Ответ для предварительной проверки не имеет статуса HTTP ok.

Может ли кто-нибудь помочь мне объяснить, почему он успешен в POSTMAN, а не в JavaScript?

Код в ReactJS

var data = {
        "password":"password",
        "username":"uname"
 }

fetch("https://ipaddress:port/module/authenticate", {  
    method: "POST",  
    headers: {  
      "Content-Type": "application/json"
    },  
    body: JSON.stringify(data)  
 }).then(response => {  
...  
    })
    .catch((e) => {  
...  
    })

Код в Springboot

@PostMapping(value = "/module/authenticate ")  
@ResponseBody  
public ResponseEntity<String> authenticate(@RequestAttribute UserDetails userDetails) throws Exception {  
...  
}

public class UserDetails {

// The username for the logging in user.
private String username;
// The password for the user.
private String password;

public String getUsername() {
    return username;
}

public void setUsername(String username) {
    this.username = username;
}

public String getPassword() {
    return password;
}

public void setPassword(String password) {
    this.password = password;
}

} ​​

Обнаружена причина сбоя POST man
Post man не выполняет вызов OPTIONS до API POSTследовательно, это не подведет.Однако вызов fetch сначала проверяет OPTIONS на наличие доступа к cors, и он должен обрабатываться Spring Security.Справка: Почему отправляется запрос OPTIONS и можно ли его отключить?

Обходным путем может быть установка типа содержимого в виде обычного / текстового

1 Ответ

0 голосов
/ 08 октября 2018

Нет необходимости в обходном пути для обработки запроса перед полетом

правильно сконфигурируйте его в вашей весенней безопасности

@EnableGlobalMethodSecurity(prePostEnabled = true)
public class AppSecurityAdapter extends WebSecurityConfigurerAdapter {

//... other configuration here

@Override
public void configure(WebSecurity web) throws Exception {
    web.ignoring()
            .antMatchers(HttpMethod.OPTIONS, "/**")
...