spring boot

Spring Websocket配置流程分析

ref-nobody 创建时间 2025年7月31日 | 本文最后更新于 2025年8月16日 No Comments

我们在使用Spring Websocket的时候需要添加下面的依赖: 问题开始于想要开发一个聊天应用程序,需要保存已经通过websocket建立连接的session,当向某个客户端发送消息的时候,检查对方是否在线。如果不在线,则保存离线消息。首先从配置websocket开始: 配置websocket 使用websocket的时候首先需要配置好websocket的端点信息,用于客户端建立连接。一般会使用实现WebSocketMessageBrokerConfigurer接口的方式,通过里面的registerStompEndpoints方法进行注册,如果是与spring security进行集成的话,可以继承AbstractSecurityWebSocketMessageBrokerConfigurer类 通过上面的方式我们定义了一个WebSocketMessageBrokerConfigurer类型的配置类。在项目运行的时候,这个类会被注入到DelegatingWebSocketMessageBrokerConfiguration类中,在这个类中会自动注入容器内所有的WebSocketMessageBrokerConfigurer配置: 这也是一个配置类,也会被自动加载到spring容器中。同时在这个类中声明了多个@Bean,我们主要来看stompWebSocketHandlerMapping和subProtocolWebSocketHandler。 将websocket路径转换为HandlerMapping 我们可以看到,在这个类中会创建WebMvcStompEndpointRegistry对象,里面由两部分组成:– WebSocketHandler:处理WebSocket消息和生命周期事件;– StompSubProtocolHandler:子协议处理器,可以处理STOMP的1.0, 1.1, and 1.2版本;…

Read More

自定义Security认证流程

ref-nobody 创建时间 2025年7月30日 | 本文最后更新于 2025年8月16日 No Comments

在spring-security中,针对于用户名和密码的登录认证已经提供了UsernamePasswordAuthenticationFilter过滤器,而如果我们想使用手机号验证码的认证方式则需要自定义认证过滤逻辑。 自定义认证过滤器可以通过继承OncePerRequestFilter或者AbstractAuthenticationProcessingFilter来实现,这两种方式是有区别的。 OncePerRequestFilter与AbstractAuthenticationProcessingFilter 自定义过滤器filter,可以继承自OncePerRequestFilter或者是AbstractAuthenticationProcessingFilter来实现自己的过滤器。这两个类是有区别的,首先看这两个类的全路径:1. org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter2. org.springframework.web.filter.OncePerRequestFilter可以看到OncePerRequestFilter是在Spring-web包下面,而AbstractAuthenticationProcessingFilter是在spring-security-web包下面。 核心差异 我们在使用security的时候,会通过permitAll()配置一些不需要进行认证的请求,例如登录的请求不需要进行权限认证,会使用HttpSecurity来进行配置: 需要注意的是这些配置不会影响继承于OncePerRequestFilter类的过滤器,因为OncePerRequestFilter过滤器不是spring security体系下的。如果需要跳过某个请求uri,则需要自己进行实现;我们也可以重写OncePerRequestFilter中的shouldNotFilter方法即可,这是OncePerRequestFilter类中已经预置好的方法,可以让某些请求不执行当前filter的逻辑。

Read More