我使用Spring Boot、Hibernate和JPA存储库来搜索数据。我想根据登录用户的上下文过滤搜索结果。例如,是否使用Find方法返回登录用户所拥有的所有实体?我有许多用于过滤的JPA方法,我不想在附加约束的情况下编辑所有这些方法。有没有可能是动态的?
发布于 2018-06-29 00:59:01
您可以为会话创建hibernate过滤器和enableFilter,如下所示
/**
* @author ali akbar azizkhani
*/
@Entity
@Table(name = "post")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Filter(name = "filter",condition = "created_By=:user")
@FilterDef(name = "filter", defaultCondition = "deleted=0",parameters = {
@ParamDef(name = "user",type = "string")
})
public class Post {
@Id
@GeneratedValue
Long id;
@Column(name = "title")
String title;
@Column(name = "deleted")
boolean deleted = false;
@OneToMany(mappedBy = "post")
Set<PostComment> commentList = new HashSet<>();
@Column(name = "createdBy")
String createdBy;
},然后使用方面启用过滤器。
@Aspect
@Component
class EnableFilterAspect {
@AfterReturning(
pointcut = "bean(entityManagerFactory) && execution(* createEntityManager(..))",
returning = "retVal")
public void getSessionAfter(JoinPoint joinPoint, Object retVal) {
if (retVal != null && EntityManager.class.isInstance(retVal)) {
Session session = ((EntityManager) retVal).unwrap(Session.class);
session.enableFilter("filter").setParameter("user","admin");//get from security context holder
}
}
}https://stackoverflow.com/questions/37970140
复制相似问题