webflux, как передать текущий логин моно строки потоку - PullRequest
0 голосов
/ 09 января 2020

Я все еще новичок в весенней загрузке Webflux. Я использую Casssandra в качестве базы данных, ниже у меня есть таблицы друзей, я хочу получить всех своих друзей на основе моего логина. Как я могу получить текущий логин и передать его потоку

// Here i retrieved currently login user ID which is a mono string

public Mono<String> getUserID(Mono<String> principal) {
  return principal
   .map(Principal::getName)
}

ИЛИ

public static Mono<String> getUserIDFromRequest(ServerRequest request) {
    return request.principal()
            .cast(UsernamePasswordAuthenticationToken.class)
            .map(UsernamePasswordAuthenticationToken::getName);
}

// My friends table

public class Friends {
  @PrimaryKey("userid")
  private long userId;
  private long friendId;
  private FriendObject friendObject;
  private String since;
  private boolean enableNotifications;
  private boolean allowMessages;
  // Getters and setters
}

@Repository
public interface FriendsRepository extends ReactiveCassandraRepository<Friends, Long> {
}

@Service
public class FriendshipServiceImpl implements FriendshipService {
  @Override
  public Mono<Friends> addFriend(Friends friends) {
    return friendsRepository.save(friends);
  }
}

public class FriendshipHandler {

  // How to pass the Login Mono<String> to this flux Or how can i combine Mono and Flux?
  @GetMapping(path="/friends/list", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
  Flux<Friends> getFriends(Mono<Principal> principal) {
    return friendshipService.getFriends(Long.valueOf("The login ID"));
  }

  OR

  public Mono<ServerResponse> getFriends(ServerRequest request) {
     return ok().body(
      friendshipService
        .getFriends(Long.valueOf("The login ID")), Friends.class);
  }
}

Ответы [ 2 ]

0 голосов
/ 13 января 2020

Пожалуйста, прочитайте о ReactiveSecurityContextHolder

0 голосов
/ 10 января 2020

это базовый c webflux, поэтому, если вы не можете этого сделать, вам нужно прочитать

@GetMapping(path="/friends", produces=MediaType.TEXT_EVENT_STREAM_VALUE)
Flux<Friends> getFriends(Mono<Principal> principal) {
    return principal.map(principal -> {
        return // Here you do what you need to with the principal
    });
}
...