public class SecurityEvaluationContextExtension
extends org.springframework.data.repository.query.spi.EvaluationContextExtensionSupport
By defining this object as a Bean, Spring Security is exposed as SpEL expressions for creating Spring Data queries.
With Java based configuration, we can define the bean using the following:
For example, if you return a UserDetails that extends the following User object:
@Entity public class User { @GeneratedValue(strategy = GenerationType.AUTO) @Id private Long id; ... }
And you have a Message object that looks like the following:
@Entity public class Message { @Id @GeneratedValue(strategy = GenerationType.AUTO) private Long id; @OneToOne private User to; ... }You can use the following
Query
annotation to search for only messages that are
to the current user:
@Repository public interface SecurityMessageRepository extends MessageRepository { @Query("select m from Message m where m.to.id = ?#{ principal?.id }") List<Message> findAll(); }This works because the principal in this instance is a User which has an id field on it.
Constructor and Description |
---|
SecurityEvaluationContextExtension()
Creates a new instance that uses the current
Authentication found on the
SecurityContextHolder . |
SecurityEvaluationContextExtension(Authentication authentication)
Creates a new instance that always uses the same
Authentication object. |
Modifier and Type | Method and Description |
---|---|
String |
getExtensionId() |
Object |
getRootObject() |
public SecurityEvaluationContextExtension()
Authentication
found on the
SecurityContextHolder
.public SecurityEvaluationContextExtension(Authentication authentication)
Authentication
object.authentication
- the Authentication
to usepublic String getExtensionId()
public Object getRootObject()
getRootObject
in interface org.springframework.data.repository.query.spi.EvaluationContextExtension
getRootObject
in class org.springframework.data.repository.query.spi.EvaluationContextExtensionSupport