Add hasAuthority method to RSocketSecurity

Fixes gh-7435
This commit is contained in:
Luis Felipe Vega Calle 2019-09-26 03:57:23 -05:00 committed by Rob Winch
parent adf9769eed
commit 350bce761f
2 changed files with 24 additions and 0 deletions

View File

@ -105,6 +105,7 @@ import java.util.List;
* </pre> * </pre>
* @author Rob Winch * @author Rob Winch
* @author Jesús Ascama Arias * @author Jesús Ascama Arias
* @author Luis Felipe Vega
* @since 5.2 * @since 5.2
*/ */
public class RSocketSecurity { public class RSocketSecurity {
@ -312,6 +313,10 @@ public class RSocketSecurity {
return access(AuthenticatedReactiveAuthorizationManager.authenticated()); return access(AuthenticatedReactiveAuthorizationManager.authenticated());
} }
public AuthorizePayloadsSpec hasAuthority(String authority) {
return access(AuthorityReactiveAuthorizationManager.hasAuthority(authority));
}
public AuthorizePayloadsSpec hasRole(String role) { public AuthorizePayloadsSpec hasRole(String role) {
return access(AuthorityReactiveAuthorizationManager.hasRole(role)); return access(AuthorityReactiveAuthorizationManager.hasRole(role));
} }

View File

@ -51,6 +51,7 @@ import static org.assertj.core.api.Assertions.assertThatCode;
/** /**
* @author Rob Winch * @author Rob Winch
* @author Luis Felipe Vega
*/ */
@ContextConfiguration @ContextConfiguration
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@ -135,6 +136,23 @@ public class RSocketMessageHandlerConnectionITests {
assertThat(hiRob).isEqualTo("Hi rob"); assertThat(hiRob).isEqualTo("Hi rob");
} }
@Test
public void routeWhenStreamCredentialsHaveAuthority() {
UsernamePasswordMetadata connectCredentials = new UsernamePasswordMetadata("user", "password");
this.requester = requester()
.setupMetadata(connectCredentials, UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
.connectTcp(this.server.address().getHostName(), this.server.address().getPort())
.block();
String hiUser = this.requester.route("secure.authority.retrieve-mono")
.metadata(new UsernamePasswordMetadata("admin", "password"), UsernamePasswordMetadata.BASIC_AUTHENTICATION_MIME_TYPE)
.data("Felipe")
.retrieveMono(String.class)
.block();
assertThat(hiUser).isEqualTo("Hi Felipe");
}
@Test @Test
public void connectWhenNotAuthenticated() { public void connectWhenNotAuthenticated() {
this.requester = requester() this.requester = requester()
@ -225,6 +243,7 @@ public class RSocketMessageHandlerConnectionITests {
.setup().hasRole("SETUP") .setup().hasRole("SETUP")
.route("secure.admin.*").hasRole("ADMIN") .route("secure.admin.*").hasRole("ADMIN")
.route("secure.**").hasRole("USER") .route("secure.**").hasRole("USER")
.route("secure.authority.*").hasAuthority("ROLE_USER")
.anyRequest().permitAll() .anyRequest().permitAll()
) )
.basicAuthentication(Customizer.withDefaults()); .basicAuthentication(Customizer.withDefaults());