Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 有没有办法从存储库中的Spring Security获取当前用户ID?_Hibernate_Spring Security_Spring Data Jpa_Spring Data_Nhibernate Mapping - Fatal编程技术网

Hibernate 有没有办法从存储库中的Spring Security获取当前用户ID?

Hibernate 有没有办法从存储库中的Spring Security获取当前用户ID?,hibernate,spring-security,spring-data-jpa,spring-data,nhibernate-mapping,Hibernate,Spring Security,Spring Data Jpa,Spring Data,Nhibernate Mapping,我有一个包含多个本机查询的Spring数据存储库,所有这些查询都需要由当前登录的用户作为in进行筛选,其中user_id=?应该包含在每个查询中。有没有办法从repo访问springsecurity的userId并在查询中使用它?我可以在控制器中获取userId并将其作为方法参数传递给repo,但是当涉及多个方法时,这会变得非常重复。 以下回购协议的查询示例: @Query(value = "SELECT COUNT(DISTINCT project_id) FROM reports

我有一个包含多个本机查询的Spring数据存储库,所有这些查询都需要由当前登录的用户作为in进行筛选,其中user_id=?应该包含在每个查询中。有没有办法从repo访问springsecurity的userId并在查询中使用它?我可以在控制器中获取userId并将其作为方法参数传递给repo,但是当涉及多个方法时,这会变得非常重复。 以下回购协议的查询示例:

@Query(value = "SELECT COUNT(DISTINCT project_id) FROM reports r WHERE r.month = ?1 AND r.year = ?2", nativeQuery = true)
    int getTotalProjectsByMonth(int month, int year);
你可以试试看

SecurityContextHolder.getContext().getAuthentication();

这将在类中起作用,但在作为接口的repo中不起作用。在类中获取用户的详细信息不是问题,在repo中获取用户的详细信息是问题。您的导入正确吗?您应该使用import org.springframework.security.core.context.SecurityContextHolder;在春季安全核心图书馆是的。您可以在查询中使用Spring表达式语言从SecurityContext获取主体。看这里作为起点:有趣!这是一个很好的指针,谢谢,但据我所知,无法直接从Spring Security获取用户ID,我可能需要自定义UserDetails服务,该服务带有一个从数据库提取用户ID的方法?我不确定,如果安全上下文中的主体有一个方法getId或其他什么,那么在您的查询主体?.id或其他什么中引用它。它没有任何获取id的方法,这就是为什么我要问一个自定义服务。您在安全上下文中到底有什么?