【问题标题】:Spring Security principal cannot be found from SpEL无法从 SpEL 中找到 Spring Security 主体
【发布时间】:2017-03-10 15:21:04
【问题描述】:

我想通过 JPA 查询从 CrudRepository 获取 RestResource 的数据:

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();
}

但我明白了:

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

我可以直接拿到principal:

SecurityContextHolder.getContext().getAuthentication().getPrincipal()

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

【问题讨论】:

    标签: java spring spring-security spring-data-jpa


    【解决方案1】:

    我遇到了同样的问题,我通过以下方式解决了它:

    提供 SecurityEvaluationContextExtension 类型的 bean

    正如documentation所说。

    以下是来自doc 的 Java 和 XML 配置:

    Java 配置

    @Bean
    public SecurityEvaluationContextExtension securityEvaluationContextExtension() {
        return new SecurityEvaluationContextExtension();
    }
    

    XML 配置

    <bean class="org.springframework.security.data.repository.query.SecurityEvaluationContextExtension"/>
    

    希望这会有所帮助:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-03
      • 1970-01-01
      • 2013-11-06
      • 2017-05-15
      • 2019-04-22
      • 2017-06-22
      • 2018-03-28
      • 2018-11-20
      相关资源
      最近更新 更多