|
@@ -7,10 +7,11 @@ It is not only useful but necessary to include the user in the queries to suppor
|
|
|
[[data-configuration]]
|
|
|
== Spring Data & Spring Security Configuration
|
|
|
|
|
|
-To use this support, add `org.springframework.security:spring-security-data` dependency and provide a bean of type `SecurityEvaluationContextExtension`.
|
|
|
-In Java Configuration, this would look like:
|
|
|
+To use this support, add `org.springframework.security:spring-security-data` dependency and provide a bean of type `SecurityEvaluationContextExtension`:
|
|
|
|
|
|
-[source,java]
|
|
|
+====
|
|
|
+.Java
|
|
|
+[source,java,role="primary"]
|
|
|
----
|
|
|
@Bean
|
|
|
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
|
|
@@ -18,6 +19,16 @@ public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
|
|
|
}
|
|
|
----
|
|
|
|
|
|
+.Kotlin
|
|
|
+[source,kotlin,role="secondary"]
|
|
|
+----
|
|
|
+@Bean
|
|
|
+fun securityEvaluationContextExtension(): SecurityEvaluationContextExtension {
|
|
|
+ return SecurityEvaluationContextExtension()
|
|
|
+}
|
|
|
+----
|
|
|
+====
|
|
|
+
|
|
|
In XML Configuration, this would look like:
|
|
|
|
|
|
[source,xml]
|
|
@@ -31,7 +42,9 @@ In XML Configuration, this would look like:
|
|
|
Now Spring Security can be used within your queries.
|
|
|
For example:
|
|
|
|
|
|
-[source,java]
|
|
|
+====
|
|
|
+.Java
|
|
|
+[source,java,role="primary"]
|
|
|
----
|
|
|
@Repository
|
|
|
public interface MessageRepository extends PagingAndSortingRepository<Message,Long> {
|
|
@@ -40,6 +53,17 @@ public interface MessageRepository extends PagingAndSortingRepository<Message,Lo
|
|
|
}
|
|
|
----
|
|
|
|
|
|
+.Kotlin
|
|
|
+[source,kotlin,role="secondary"]
|
|
|
+----
|
|
|
+@Repository
|
|
|
+interface MessageRepository : PagingAndSortingRepository<Message,Long> {
|
|
|
+ @Query("select m from Message m where m.to.id = ?#{ principal?.id }")
|
|
|
+ fun findInbox(pageable: Pageable): Page<Message>
|
|
|
+}
|
|
|
+----
|
|
|
+====
|
|
|
+
|
|
|
This checks to see if the `Authentication.getPrincipal().getId()` is equal to the recipient of the `Message`.
|
|
|
Note that this example assumes you have customized the principal to be an Object that has an id property.
|
|
|
By exposing the `SecurityEvaluationContextExtension` bean, all of the xref:servlet/authorization/expression-based.adoc#common-expressions[Common Security Expressions] are available within the Query.
|