我希望能够使用Spring MVC在Java中构建应用程序。 关于设计和实现我的想法,我有一些问题。
以下是我正在尝试开发的内容,您将在下面找到我的设计问题。
用户导航到托管图片的网站(html5画布)并且能够将其用作访客。来宾或登录用户可以搜索其他人的作品。 该网站允许最终用户创建艺术作品并与世界分享 通过发布它并为资源生成永久URL。任何人都可以访问该作品,除非它具有用户/密码保护,艺术作者可以根据需要决定。只允许艺术作者的作者编辑他的作品。用户将能够在属于他们或其他用户的图像下发表评论。客人需要成为其他人的艺术作品评论或创建自己的图像和永久网址。
问题:
我在网络开发方面的经验非常有限。我只是一个数据库的老手。 :-( 所以我很抱歉这些问题是否像诺布一样。我知道一些春天和Java。
1)。我应该有2种模板页吗?一个用于作者,一个用于其他用户/来宾,用于每个用户的艺术作品页面?不确定如何在其他流行的应用程序中处理它。
2)。我该如何通过弹簧安全来管理这个问题。每个用户只能编辑他的艺术作品页面而不能编辑其他人的页面。在文档中,我只看到ROLE_USER / ROLE_ADMIN的示例。这似乎对我的需要来说太基础了。不知道从哪里开始并适合我涉及协作的用例。任何提供此类设计的教程都会非常有用。
提前谢谢。
答案 0 :(得分:1)
您可以使用相同的模板显示作者和访客的视图,并根据当前用户对该页面图稿的权限修改页面上的某些元素。如果不同的视图完全不同,你只会创建两个单独的页面,而且使页面动态化的麻烦要多于它的价值。
Spring Security处理身份验证(谁是当前用户?)和授权(允许当前用户执行此操作?)。在这里,我们谈论的是authorization。
有多种方法可以使用Spring Security进行授权。一种方法是使用一系列选民策略来决定是否允许用户执行操作(AccessDecisionManager)。另一个是完整的ACL implementation,您可以在其中维护一组表,这些表描述了您要锁定的每个资源的人员访问权限。从ACL中读取很简单,但是要维护这些表。每次创建权限或创建安全对象时,都必须插入或更新ACL。向下滚动here以查看示例。
我最近使用Spring Security评估了不同的授权方法,并决定自己使用用户的主体,并点击数据库以查看用户是否拥有资源的权限。 Spring Security很复杂,如果你在网站生效后在ACL管理代码中引入了一个错误,那么祝你好运。该错误仅存在于已修改ACL的特定记录中。
我会保持简单。使用方法创建SecurityManager:
public boolean canViewArtwork(String userPrincipal, Long artworkId);
public boolean canEditArtwork(String userPrincipal, Long artworkId);
然后,在需要进行安全检查时调用这些方法。这是您可以离开的代码,稍后再回过头来理解。
请注意,SecurityManager正在检查权限,而不是角色。项目始终以两个角色开头,“用户”和“管理员”。在路上,这些线总是开始模糊,你最终会在整个地方找到条件。您最初仍然可以在系统中拥有这两个角色,但SecurityManager将是唯一可以处理它们的地方。如果您最终添加第三个角色 - 没问题,只需要更改SecurityManager。