Как авторизовать пользователя и сделать пост-запрос?
Я не смог придумать более подробный вопрос, потому что я так мало знаю, что не могу его сформулировать.
Серверпостмаппирование со стороны Spring Framework с получением токена JWT от пользователя и получением Entity of Record.Но после того, как я добавил заголовок HTTP, программа в режиме отладки не видит мой метод записи.
@PostMapping("{token}")
public ResponseEntity addRecord(@PathVariable String token,@RequestBody Record record) {
String username;
if (tokenProvider.validateToken(token))
username = tokenProvider.getUsername(token);
else
return ResponseEntity.badRequest().body("Token is wrong");
service.addRecord(username, record);
return ResponseEntity.ok(record);
Клиентская сторона, Android, пост-запрос с Retrofit2 Возвращает мне 404 из Response.body (), ноавторизация проходит на стороне сервера
@POST("/records")
Call<SpringUser> newRecord(
@Query("token") String usertoken,
@Header("Authorization") String token,
@Body SpringUser user
);
Пример кода, который я нашел в интернете. И, как я понял, он добавляет новый фильтр, который фильтрует заголовки входящих запросов.
private JwtTokenProvider jwtTokenProvider;
public JwtTokenFilter(JwtTokenProvider jwtTokenProvider) {
this.jwtTokenProvider = jwtTokenProvider;
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain filterChain)
throws IOException, ServletException {
String token = jwtTokenProvider.resolveToken((HttpServletRequest) req);
if (token != null && jwtTokenProvider.validateToken(token)) {
Authentication auth = jwtTokenProvider.getAuthentication(token);
if (auth != null) {
SecurityContextHolder.getContext().setAuthentication(auth);
}
}
filterChain.doFilter(req, res);
}
Просто код от JwtTokenProvider
public String resolveToken(HttpServletRequest req) {
String bearerToken = req.getHeader("Authorization");
log.info("Authorization is processing with: " + req.getHeader("Authorization"));
if (bearerToken != null && bearerToken.startsWith("Bearer_")) {
return bearerToken.substring(7, bearerToken.length());
}
return null;
}
public boolean validateToken(String token) {
try {
Jws<Claims> claims = Jwts.parser().setSigningKey(key).parseClaimsJws(token);
return true;
} catch (JwtException | IllegalArgumentException e) {
return false;
}
}
Мне показалось, что правильнее было бы не идти вперед, а использовать «магию» весны.Но я чувствую, что делаю что-то не так, но не могу понять, что.