mirror of
https://github.com/spring-projects/spring-security.git
synced 2025-05-29 16:22:12 +00:00
find -name "*.adoc" | xargs -I{file} awk -v file={file} '/\[\[/ { gsub("\[|\]", ""); id=$0; gsub("./docs/modules/ROOT/pages/", "", file); gsub("\[|\]", ""); id=$0;getline;text=$0; sub("^=+ ","", text); print file > "build/ids/"id".id"; print text > "build/ids/"id".text" }' {file} find docs/modules -name "*.adoc"|while read adoc_file_to_replace; do echo "Replacing $adoc_file_to_replace" for id_file in build/ids/*.id; do id=$(basename $id_file | sed 's/\.id$//') xref_page=$(cat $id_file) if [[ "$adoc_file_to_replace" -ef "./docs/modules/ROOT/pages/$xref_page" ]] then echo " - Skipping same page refid $id " else sed -i -E "s%<<$id(|,([^,>]+))>>%xref:${xref_page}#${id}[\2]%g" $adoc_file_to_replace fi done done
71 lines
2.2 KiB
Plaintext
71 lines
2.2 KiB
Plaintext
[[data]]
|
|
= Spring Data Integration
|
|
|
|
Spring Security provides Spring Data integration that allows referring to the current user within your queries.
|
|
It is not only useful but necessary to include the user in the queries to support paged results since filtering the results afterwards would not scale.
|
|
|
|
[[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:
|
|
|
|
====
|
|
.Java
|
|
[source,java,role="primary"]
|
|
----
|
|
@Bean
|
|
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
|
|
return new SecurityEvaluationContextExtension();
|
|
}
|
|
----
|
|
|
|
.Kotlin
|
|
[source,kotlin,role="secondary"]
|
|
----
|
|
@Bean
|
|
fun securityEvaluationContextExtension(): SecurityEvaluationContextExtension {
|
|
return SecurityEvaluationContextExtension()
|
|
}
|
|
----
|
|
====
|
|
|
|
In XML Configuration, this would look like:
|
|
|
|
[source,xml]
|
|
----
|
|
<bean class="org.springframework.security.data.repository.query.SecurityEvaluationContextExtension"/>
|
|
----
|
|
|
|
[[data-query]]
|
|
== Security Expressions within @Query
|
|
|
|
Now Spring Security can be used within your queries.
|
|
For example:
|
|
|
|
====
|
|
.Java
|
|
[source,java,role="primary"]
|
|
----
|
|
@Repository
|
|
public interface MessageRepository extends PagingAndSortingRepository<Message,Long> {
|
|
@Query("select m from Message m where m.to.id = ?#{ principal?.id }")
|
|
Page<Message> findInbox(Pageable pageable);
|
|
}
|
|
----
|
|
|
|
.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.
|