我想获得一些使用Spring MVC在Java中构建应用程序的练习。
我对设计和实施我的想法有一些疑问。

这是我要开发的内容,下面您会发现我的设计问题。


用户导航到托管艺术品(html5画布)并可以将其用作访客的网站。访客或登录用户可以搜索其他人的艺术品。
该网站使最终用户能够创建艺术品并与世界分享
通过发布它并为资源生成一个永久URL。任何人都可以访问该艺术品,除非它具有艺术品作者可以决定是否需要的用户/密码保护。仅允许艺术品作者编辑其艺术品。用户将能够在属于他们或其他用户的图像下发表评论。来宾必须是成员,才能对他人的艺术品发表评论或创建自己的图像和永久URL。


问题:

我在网络开发方面的经验非常有限。我只是一个数据库vetran。 :-(
因此,我对这些问题是否是新手表示歉意。我知道一些春天和Java。

1)。我应该有2种模板页面吗?一个供作者使用,一个供其他用户/来宾用于每个用户的艺术品页面?不确定在其他流行的应用程序中如何处理。

2)。我应该如何通过Spring Security来解决这个问题。每个用户只能编辑他的作品页面,而不能编辑其他人的作品页面。在文档中,我仅看到ROLE_USER / ROLE_ADMIN的示例。对于我来说,这似乎太基本了。不知道从哪里开始,是否适合我涉及协作的用例。提出此类设计的任何教程都将非常有帮助。

先感谢您。

最佳答案

不同的模板?

您可以使用相同的模板显示作者和来宾的视图,并基于当前用户对该页面的插图的权限来修改页面上的某些元素。如果不同的视图根本不同,则只创建两个单独的页面,并且使页面动态化比它值得的麻烦更多。

春季授权安全

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。

10-04 14:11