从SpEL找不到Spring Security主体

Ant*_*nyi 1 java spring spring-security spring-data-jpa

我想从得到的数据CrudRepository用于RestResource由JPA查询:

public interface IContactRepository extends PagingAndSortingRepository<Contact, Long> {

    @Query("select contact from Contact contact where contact.owner.login = ?#{principal.username}")
    @RestResource( path = "my")
    List<Contact> findByOwner();
}
Run Code Online (Sandbox Code Playgroud)

但我明白了:

在'java.lang.Object []'类型的对象上找不到属性或字段'principal' - 可能不公开?

我可以直接获得校长:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()
Run Code Online (Sandbox Code Playgroud)

但我需要在界面内直接访问RestResource.

Ric*_*dMZ 5

我遇到了同样的问题,我通过这样做来修复它:

提供SecurityEvaluationContextExtension类型的bean

正如文件所说.

以下是doc中的Java和XML配置:

Java配置

@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
    return new SecurityEvaluationContextExtension();
}
Run Code Online (Sandbox Code Playgroud)

XML配置

<bean class="org.springframework.security.data.repository.query.SecurityEvaluationContextExtension"/>
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助 :)