32
32
import org .springframework .messaging .support .ChannelInterceptor ;
33
33
import org .springframework .security .authorization .AuthorizationManager ;
34
34
import org .springframework .security .authorization .SpringAuthorizationEventPublisher ;
35
+ import org .springframework .security .core .context .SecurityContextHolder ;
36
+ import org .springframework .security .core .context .SecurityContextHolderStrategy ;
35
37
import org .springframework .security .messaging .access .intercept .AuthorizationChannelInterceptor ;
36
38
import org .springframework .security .messaging .access .intercept .MessageMatcherDelegatingAuthorizationManager ;
37
39
import org .springframework .security .messaging .context .AuthenticationPrincipalArgumentResolver ;
@@ -59,7 +61,10 @@ final class WebSocketMessageBrokerSecurityConfiguration
59
61
private static final AuthorizationManager <Message <?>> ANY_MESSAGE_AUTHENTICATED = MessageMatcherDelegatingAuthorizationManager
60
62
.builder ().anyMessage ().authenticated ().build ();
61
63
62
- private final ChannelInterceptor securityContextChannelInterceptor = new SecurityContextChannelInterceptor ();
64
+ private SecurityContextHolderStrategy securityContextHolderStrategy = SecurityContextHolder
65
+ .getContextHolderStrategy ();
66
+
67
+ private final SecurityContextChannelInterceptor securityContextChannelInterceptor = new SecurityContextChannelInterceptor ();
63
68
64
69
private final ChannelInterceptor csrfChannelInterceptor = new CsrfChannelInterceptor ();
65
70
@@ -74,17 +79,27 @@ final class WebSocketMessageBrokerSecurityConfiguration
74
79
75
80
@ Override
76
81
public void addArgumentResolvers (List <HandlerMethodArgumentResolver > argumentResolvers ) {
77
- argumentResolvers .add (new AuthenticationPrincipalArgumentResolver ());
82
+ AuthenticationPrincipalArgumentResolver resolver = new AuthenticationPrincipalArgumentResolver ();
83
+ resolver .setSecurityContextHolderStrategy (this .securityContextHolderStrategy );
84
+ argumentResolvers .add (resolver );
78
85
}
79
86
80
87
@ Override
81
88
public void configureClientInboundChannel (ChannelRegistration registration ) {
82
89
this .authorizationChannelInterceptor
83
90
.setAuthorizationEventPublisher (new SpringAuthorizationEventPublisher (this .context ));
91
+ this .authorizationChannelInterceptor .setSecurityContextHolderStrategy (this .securityContextHolderStrategy );
92
+ this .securityContextChannelInterceptor .setSecurityContextHolderStrategy (this .securityContextHolderStrategy );
84
93
registration .interceptors (this .securityContextChannelInterceptor , this .csrfChannelInterceptor ,
85
94
this .authorizationChannelInterceptor );
86
95
}
87
96
97
+ @ Autowired (required = false )
98
+ void setSecurityContextHolderStrategy (SecurityContextHolderStrategy securityContextHolderStrategy ) {
99
+ Assert .notNull (securityContextHolderStrategy , "securityContextHolderStrategy cannot be null" );
100
+ this .securityContextHolderStrategy = securityContextHolderStrategy ;
101
+ }
102
+
88
103
@ Autowired (required = false )
89
104
void setAuthorizationManager (AuthorizationManager <Message <?>> authorizationManager ) {
90
105
this .authorizationChannelInterceptor = new AuthorizationChannelInterceptor (authorizationManager );
0 commit comments