Spring Data Rest:返回用户资源

时间:2015-06-14 20:23:47

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

我正在使用Spring Boot和Spring Data Rest创建一个简单的CRUD-App(购物清单)。我有一个资源:ShoppingItem。是否有一种简单的方法只返回属于发送请求的用户的资源? (多用户支持)因此用户只能获得自己的ShoppingItems而不是每个ShoppingItem。 或者我必须自己实现一个控制器,我这样做了吗?

我发现Spring Data REST filtering data based on the user这种方法可以根据用户过滤资源,但这对我的存储库端点没有帮助。

提前致谢

3 个答案:

答案 0 :(得分:3)

如果您正在使用Spring安全集成,您可以使用ACL(可能很重)或简单postFilter,如下所示:

public interface ShoppingItemRepository extends CrudRepository<ShoppingItem, Long> {
    @PostFilter("filterObject.user.getId() == principal.id")
    @Override
    Iterable<ShoppingItem> findAll();   
}

答案 1 :(得分:1)

我最近解决了这个问题,请参阅Spring Data Rest Override Repositories (Controllers vs AOP)

我发现最优雅的解决方案是使用AOP,此示例包含QueryDSL和Spring Data REST存储库:

def parse_hyperlinks(line, replace):
    new_line = str(line)
    soup = BeautifulSoup(new_line, "html.parser")

    links = soup.findAll("href")

    for href in links:
        href.replaceWith(replace) # <- this guy

    new_line = str(soup)

    return new_line

line = "<href link=\"google.com\" internal=\"false\">google</href>"
replace = "<a href=\"google.com\" data-attached-link=\"{{&quot;type&quot;:&quot;Web&quot;,&quot;url&quot;:&quot;google.com&quot;,&quot;title&quot;:&quot;google.com&quot;}}\" class=\"wz-link inserted\">google</a>"
print parse_hyperlinks(line, replace)

$ python parse.py
'\\&lt;a href="google.com" data-attached-link="{&amp;quot;type&amp;quot;:&amp;quot;Web&amp;quot;,&amp;quot;url&amp;quot;:&amp;quot;google.com&amp;quot;,&amp;quot;title&amp;quot;:&amp;quot;google.com&amp;quot;}" class="wz-link inserted"\\&gt;google\\&lt;/a\\&gt;'

答案 2 :(得分:0)

您最好实施控制器有以下几个原因:

  • 想象一下,您的应用程序具有某种管理界面,可以查看所有购物清单(如管理员帐户一样)

  • 或者您需要在某些基于cron的作业中操作购物清单(缺少用途)