#spring-boot
#весенняя загрузка
Вопрос:
Я проверяю звонок на postman для входа в систему. Но мой запрос не совпадает с RequestBody . Я хочу протестировать аутентификацию jwt.
package com.test.jwt.api.controller;
import com.test.jwt.api.entity.AuthRequest;
import com.test.jwt.api.util.JwtUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class WelcomeController {
@Autowired
private JwtUtil jwtUtil;
@Autowired
private AuthenticationManager authenticationManager;
@GetMapping("/")
public String welcome() {
return "Welcome !!";
}
@PostMapping("/authenticate")
public String generateToken(@RequestBody AuthRequest authRequest) throws Exception {
try {
System.out.println("Appel generate Token" authRequest.getUserName() "/" authRequest.getPassword());
authenticationManager.authenticate(
new UsernamePasswordAuthenticationToken(authRequest.getUserName(), authRequest.getPassword())
);
} catch (Exception ex) {
throw new Exception("inavalid username/password");
}
return jwtUtil.generateToken(authRequest.getUserName());
// return "toto";
}
}
Запрос авторизации моего класса
package com.test.jwt.api.entity;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
public class AuthRequest {
private String username;
private String password;
public AuthRequest(String username, String password) {
System.out.println("TEste");
this.username = username;
this.password = password;
}
public AuthRequest() {
System.out.println("TEste2");
}
public String getUserName() {
// TODO Auto-generated method stub
return null;
}
public Object getPassword() {
// TODO Auto-generated method stub
return null;
}
@JsonProperty(value = "username")
public void setUserName(String username) {
this.username = username;
}
@JsonProperty(value = "password")
public void setPassword(String password) {
this.password = password;
}
}
Мой Json
{
"username": "user1",
"password": "pwd1"
}
Мой журнал. Данные крадут пустые.
Приложение TEste2 генерирует Токенnull / null
Вы знаете, в чем моя ошибка?
Ответ №1:
Этот POJO — AuthRequest
программный результат возвращается null
от обоих его получателей. У вас также есть смесь Lombok @Data
, а также геттеры ручной работы, которые используют разные имена для полей, и аннотации JSON.
Если вы используете Lombok, то добавьте @GettersAndSetters
в класс и удалите все созданные вручную. Аналогично, полностью удалите конструкторы. Вам не нужен параметризованный конструктор, конструктора по умолчанию плюс установщиков должно быть достаточно.
Основная причина этого, по-видимому, заключается в том, что вы добавляете дополнительную реализацию поверх довольно стандартных геттеров и сеттеров, которые могли бы легко входить и выходить из JSON.