Как сделать аутентифицированные http-запросы между сервисом Spring REST и клиентом Android? - PullRequest
0 голосов
/ 11 июня 2019

Как авторизовать пользователя и сделать пост-запрос?

Я не смог придумать более подробный вопрос, потому что я так мало знаю, что не могу его сформулировать.

Серверпостмаппирование со стороны 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;
    }
}

Мне показалось, что правильнее было бы не идти вперед, а использовать «магию» весны.Но я чувствую, что делаю что-то не так, но не могу понять, что.

...