diff --git a/mongodb/security/README.md b/mongodb/security/README.adoc similarity index 61% rename from mongodb/security/README.md rename to mongodb/security/README.adoc index cd0f58a9..b87ed2fb 100644 --- a/mongodb/security/README.md +++ b/mongodb/security/README.adoc @@ -1,18 +1,18 @@ -# Spring Data MongoDB - Spring Security integration. += Spring Data MongoDB - Spring Security integration. This project contains samples of the Spring Security integration in Spring Data (MongoDB). -## Support for SpEL Expression based filtering +== Support for SpEL expression based filtering -```java +[source, java] +---- public interface PersonRepository extends CrudRepository { @Override List findAll(); - //Custom Query method with filtering based on Spring Security context information + // Custom query method with filtering based on Spring Security context information @Query("{id: ?#{ hasRole('ROLE_ADMIN') ? {$exists:true} : principal.id}}") List findAllForCurrentUserById(); } -``` - +---- diff --git a/mongodb/security/pom.xml b/mongodb/security/pom.xml index cdde3c39..1d45459c 100644 --- a/mongodb/security/pom.xml +++ b/mongodb/security/pom.xml @@ -11,7 +11,12 @@ spring-data-mongodb-security Spring Data MongoDB - Spring Security Integration + + Gosling-BUILD-SNAPSHOT + + + ${project.groupId} spring-data-mongodb-utils @@ -19,21 +24,16 @@ test - - org.springframework.data - spring-data-mongodb - 1.8.0.DATAMONGO-1244-SNAPSHOT - - org.springframework.boot spring-boot-starter-security - + org.springframework.security spring-security-data + diff --git a/mongodb/security/src/main/java/example/springdata/mongodb/people/ApplicationConfiguration.java b/mongodb/security/src/main/java/example/people/Application.java similarity index 88% rename from mongodb/security/src/main/java/example/springdata/mongodb/people/ApplicationConfiguration.java rename to mongodb/security/src/main/java/example/people/Application.java index 636ee011..47993fde 100644 --- a/mongodb/security/src/main/java/example/springdata/mongodb/people/ApplicationConfiguration.java +++ b/mongodb/security/src/main/java/example/people/Application.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.mongodb.people; +package example.people; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; @@ -28,12 +28,8 @@ import org.springframework.security.data.repository.query.SecurityEvaluationCont * @author Thomas Darimont */ @SpringBootApplication -class ApplicationConfiguration { +class Application { - public @Bean LoggingEventListener mongoEventListener() { - return new LoggingEventListener(); - } - @Bean public EvaluationContextExtension securityExtension() { return new SecurityEvaluationContextExtension(); diff --git a/mongodb/security/src/main/java/example/springdata/mongodb/people/Person.java b/mongodb/security/src/main/java/example/people/Person.java similarity index 92% rename from mongodb/security/src/main/java/example/springdata/mongodb/people/Person.java rename to mongodb/security/src/main/java/example/people/Person.java index 65003db0..13cb4ae4 100644 --- a/mongodb/security/src/main/java/example/springdata/mongodb/people/Person.java +++ b/mongodb/security/src/main/java/example/people/Person.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.mongodb.people; +package example.people; import lombok.Data; import lombok.RequiredArgsConstructor; @@ -21,7 +21,7 @@ import lombok.RequiredArgsConstructor; import org.springframework.data.annotation.Id; /** - * An entity to represent a Person. + * An entity to represent a {@link Person}. * * @author Thomas Darimont */ diff --git a/mongodb/security/src/main/java/example/springdata/mongodb/people/PersonRepository.java b/mongodb/security/src/main/java/example/people/PersonRepository.java similarity index 87% rename from mongodb/security/src/main/java/example/springdata/mongodb/people/PersonRepository.java rename to mongodb/security/src/main/java/example/people/PersonRepository.java index 167f837d..1204f8f2 100644 --- a/mongodb/security/src/main/java/example/springdata/mongodb/people/PersonRepository.java +++ b/mongodb/security/src/main/java/example/people/PersonRepository.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.mongodb.people; +package example.people; import java.util.List; @@ -25,9 +25,7 @@ import org.springframework.data.repository.CrudRepository; * * @author Thomas Darimont */ -public interface PersonRepository extends CrudRepository { - - List findAll(); +interface PersonRepository extends CrudRepository { @Query("{id: ?#{ hasRole('ROLE_ADMIN') ? {$exists:true} : principal.id}}") List findAllForCurrentUserById(); diff --git a/mongodb/security/src/test/java/example/springdata/mongodb/people/PersonRepositoryIntegrationTest.java b/mongodb/security/src/test/java/example/people/PersonRepositoryIntegrationTest.java similarity index 91% rename from mongodb/security/src/test/java/example/springdata/mongodb/people/PersonRepositoryIntegrationTest.java rename to mongodb/security/src/test/java/example/people/PersonRepositoryIntegrationTest.java index fdeb7c9d..82742eb1 100644 --- a/mongodb/security/src/test/java/example/springdata/mongodb/people/PersonRepositoryIntegrationTest.java +++ b/mongodb/security/src/test/java/example/people/PersonRepositoryIntegrationTest.java @@ -13,11 +13,12 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package example.springdata.mongodb.people; +package example.people; -import static org.hamcrest.CoreMatchers.*; -import static org.junit.Assert.*; import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; + +import example.springdata.mongodb.util.RequiresMongoDB; import java.util.Collections; import java.util.List; @@ -28,14 +29,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; -import example.springdata.mongodb.util.RequiresMongoDB; - /** * Integration test for {@link PersonRepository}. * @@ -43,13 +41,12 @@ import example.springdata.mongodb.util.RequiresMongoDB; * @authot Oliver Gierke */ @RunWith(SpringJUnit4ClassRunner.class) -@SpringApplicationConfiguration(classes = ApplicationConfiguration.class) +@SpringApplicationConfiguration(classes = Application.class) public class PersonRepositoryIntegrationTest { @ClassRule public static RequiresMongoDB mongodbAvailable = RequiresMongoDB.anyVersion(); @Autowired PersonRepository repository; - @Autowired MongoOperations operations; Person dave, oliver, carter, admin; @@ -66,11 +63,11 @@ public class PersonRepositoryIntegrationTest { @Test public void nonAdminCallingShouldReturnOnlyItSelfAsPerson() throws Exception { - + SecurityContextHolder.getContext().setAuthentication(new UsernamePasswordAuthenticationToken(dave, "x")); List persons = repository.findAllForCurrentUserById(); - + assertThat(persons, hasSize(1)); assertThat(persons, contains(dave)); } @@ -83,7 +80,7 @@ public class PersonRepositoryIntegrationTest { SecurityContextHolder.getContext().setAuthentication(auth); List persons = repository.findAllForCurrentUserById(); - + assertThat(persons, hasSize(4)); assertThat(persons, containsInAnyOrder(admin, dave, carter, oliver)); } diff --git a/mongodb/security/src/test/java/example/springdata/mongodb/people/package-info.java b/mongodb/security/src/test/java/example/springdata/mongodb/people/package-info.java deleted file mode 100644 index e4c4d5e2..00000000 --- a/mongodb/security/src/test/java/example/springdata/mongodb/people/package-info.java +++ /dev/null @@ -1,5 +0,0 @@ -/** - * Package showing usage of Spring Data MongoDB Repositories with Java 8. - */ -package example.springdata.mongodb.people; -