Skip to content

Commit 350bce7

Browse files
munilvcrwinch
authored andcommitted
Add hasAuthority method to RSocketSecurity
Fixes gh-7435
1 parent adf9769 commit 350bce7

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

config/src/main/java/org/springframework/security/config/annotation/rsocket/RSocketSecurity.java

+5
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@
105105
* </pre>
106106
* @author Rob Winch
107107
* @author Jesús Ascama Arias
108+
* @author Luis Felipe Vega
108109
* @since 5.2
109110
*/
110111
public class RSocketSecurity {
@@ -312,6 +313,10 @@ public AuthorizePayloadsSpec authenticated() {
312313
return access(AuthenticatedReactiveAuthorizationManager.authenticated());
313314
}
314315

316+
public AuthorizePayloadsSpec hasAuthority(String authority) {
317+
return access(AuthorityReactiveAuthorizationManager.hasAuthority(authority));
318+
}
319+
315320
public AuthorizePayloadsSpec hasRole(String role) {
316321
return access(AuthorityReactiveAuthorizationManager.hasRole(role));
317322
}

config/src/test/java/org/springframework/security/config/annotation/rsocket/RSocketMessageHandlerConnectionITests.java

+19
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@
5151

5252
/**
5353
* @author Rob Winch
54+
* @author Luis Felipe Vega
5455
*/
5556
@ContextConfiguration
5657
@RunWith(SpringRunner.class)
@@ -135,6 +136,23 @@ public void routeWhenStreamCredentialsAuthorized() {
135136
assertThat(hiRob).isEqualTo("Hi rob");
136137
}
137138

139+
@Test
140+
public void routeWhenStreamCredentialsHaveAuthority() {
141+
UsernamePasswordMetadata connectCredentials = new UsernamePasswordMetadata("user", "password");
142+
this.requester = requester()
143+
.setupMetadata(connectCredentials, UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
144+
.connectTcp(this.server.address().getHostName(), this.server.address().getPort())
145+
.block();
146+
147+
String hiUser = this.requester.route("secure.authority.retrieve-mono")
148+
.metadata(new UsernamePasswordMetadata("admin", "password"), UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
149+
.data("Felipe")
150+
.retrieveMono(String.class)
151+
.block();
152+
153+
assertThat(hiUser).isEqualTo("Hi Felipe");
154+
}
155+
138156
@Test
139157
public void connectWhenNotAuthenticated() {
140158
this.requester = requester()
@@ -225,6 +243,7 @@ PayloadSocketAcceptorInterceptor rsocketInterceptor(RSocketSecurity rsocket) {
225243
.setup().hasRole("SETUP")
226244
.route("secure.admin.*").hasRole("ADMIN")
227245
.route("secure.**").hasRole("USER")
246+
.route("secure.authority.*").hasAuthority("ROLE_USER")
228247
.anyRequest().permitAll()
229248
)
230249
.basicAuthentication(Customizer.withDefaults());

0 commit comments

Comments
 (0)