我正在使用Java EE 6和所有参考实现。已经为一些页面设置了安全约束,例如在/secure/*
下的所有内容都需要进行安全控制。这是粗粒度的安全。如果两个用户都有相同的角色,但是同一页面的某些内容只应该对用户"John"可见呢?或者完全不同的页面应该显示给"John"?我有许多未解答的问题,所以如果有人能提供一些链接/解释或涵盖此内容的书籍,那将是很好的。我需要更细粒度的安全控制。
我正在使用Java EE 6和所有参考实现。已经为一些页面设置了安全约束,例如在/secure/*
下的所有内容都需要进行安全控制。这是粗粒度的安全。如果两个用户都有相同的角色,但是同一页面的某些内容只应该对用户"John"可见呢?或者完全不同的页面应该显示给"John"?我有许多未解答的问题,所以如果有人能提供一些链接/解释或涵盖此内容的书籍,那将是很好的。我需要更细粒度的安全控制。
本文未涉及细粒度方法调用和合理的安全策略定义,这部分需要读者自己思考。如果您在这方面有问题,请随意在评论区或后续问题中提问,因为这些问题对广大读者都有用。
可能这个解决方案并不足够强大以满足您的需求。例如,如果您希望使用LDAP或Kerberos认证用户,以提供用户和角色的统一表示,那么这只能提供部分解决方案。在这个领域中有许多great resources可供参考,但其余部分需要读者自行思考。
在完美的世界中,你应该这样定义你的应用程序安全性。你的需求可能会有所不同,对于小规模的东西,简单而声明性的安全性可能就足够满足你的需求。毕竟,这就是它继续存在的原因。最简单的方法是
<h:panelGroup rendered="#{request.userPrincipal.name == 'user1'}">
<p>Content for user 1</p>
</h:panelGroup>
<h:panelGroup rendered="#{request.userPrincipal.name == 'user2'}">
<p>Content for user 2</p>
</h:panelGroup>
profile.xhtml
的页面和一个名为username
的请求参数。如果用户访问profile.xhtml?username=Amanda
,并且没有以Amanda的身份登录,则会看到受限制的个人资料视图。现在,您会怎么做呢?是将这些检查代码放在视图代码中,还是为该用户提供另一个视图?比如说你有两个profile.xhtml
页面。或者......你创建了一个profile.xhtml
页面,然后使用Facelets标记(组合)根据用户的登录身份包含个人资料视图的内容?解决这类问题的选项有哪些? - LuckyLuke