我正在使用Spring Boot和Spring Data Rest创建一个简单的CRUD-App(购物清单)。我有一个资源:ShoppingItem
。是否有一种简单的方法只返回属于发送请求的用户的资源? (多用户支持)因此用户只能获得自己的ShoppingItems而不是每个ShoppingItem。
或者我必须自己实现一个控制器,我这样做了吗?
我发现Spring Data REST filtering data based on the user这种方法可以根据用户过滤资源,但这对我的存储库端点没有帮助。
提前致谢
答案 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=\"{{"type":"Web","url":"google.com","title":"google.com"}}\" class=\"wz-link inserted\">google</a>"
print parse_hyperlinks(line, replace)
$ python parse.py
'\\<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\\>'
答案 2 :(得分:0)
您最好实施控制器有以下几个原因:
想象一下,您的应用程序具有某种管理界面,可以查看所有购物清单(如管理员帐户一样)
或者您需要在某些基于cron的作业中操作购物清单(缺少用途)