> For the complete documentation index, see [llms.txt](https://potoyang.gitbook.io/spring-in-action-v4/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://potoyang.gitbook.io/spring-in-action-v4/untitled-11/untitled-2.md).

# 18.4　为目标用户发送消息

到目前为止，我们所发送和接收的消息都是客户端（在 Web 浏览器中）和服务器端之间的，并没有考虑到客户端的用户。当带有 @MessageMapping 注解的方法触发时，我们知道收到了消息，但是并不知道消息来源于谁。类似地，因为我们不知道用户是谁，所以消息会发送到所有订阅对应主题的客户端上，没有办法发送消息给指定用户。

但是，如果你知道用户是谁的话，那么就能处理与某个用户相关的消息，而不仅仅是与所有客户端相关联。好消息是我们已经了解了如何识别用户。通过使用与第 9 章相同的认证机制，我们可以使用 Spring Security 来认证用户，并为目标用户处理消息。 在使用 Spring 和 STOMP 消息功能的时候，我们有三种方式利用认证用户：

* @MessageMapping 和 @SubscribeMapping 标注的方法能够使用 Principal 来获取认证用户；
* @MessageMapping、@SubscribeMapping 和 @MessageException 方法返回的值能够以消息的形式发送给认证用户；
* SimpMessagingTemplate 能够发送消息给特定用户。

我们首先看一下前两种方式，它们都能让控制器的消息处理方法使用针对特定用户的消息。
