您的位置:首页 > 其它

使用Acegi的标签库<authz:authorize>

2016-07-06 09:36 253 查看
由于前面程序员有用到这个东西,自己又不懂,上网查一篇不能转载,所以就直接cp过来了,希望原作者原谅!在着多谢了 


11.4.6  使用Acegi的标签库

称之为标签库可能有点言过其辞了。实际上,Acegi只提供了一个JSP标签:<authz:authorize>标签。

虽然Acegi的安全强制过滤器能够阻止用户浏览他们没有权限看到的页面,但最好的做法是从一开始就不提供指向受限制页面的链接。<authz:authorize>标签能够根据当前用户是否拥有恰当权限来决定显示或隐藏Web页面的内容。

<authz:authorize>是一个流程控制标签,能够在满足特定安全需求的条件下显示它的内容体。它有三个互斥的参数:

n   ifAllGranted——是一个由逗号分隔的权限列表,用户必须拥有所有列出的权限才能渲染标签体;

n   ifAnyGranted——是一个由逗号分隔的权限列表,用户必须至少拥有其中的一个才能渲染标签体;

n   ifNotGranted——是一个由逗号分隔的权限列表,用户必须不拥有其中的任何一个才能渲染标签体。

你可以轻松地想像在JSP中如何使用<authz:authorize>标签根据用户的权限来限制他们的行为。例如,Spring培训应用有一个向用户显示课程有关信息的课程明细页面。对管理员来说,如果能够从课程明细页面直接跳转到课程编辑页面从而可以更新课程信息是很方便的。但你不希望这个链接对除了管理员之外的其他用户可见。

使用<authz:authorize>标签,在用户没有管理员权限的情况下,你可以避免渲染到课程编辑页面的链接:

 

  <authz:authorize ifAllGranted="ROLE_ADMINISTRATOR">

    <a href="admin/editCourse.htm?courseId=${course.id}">

      Edit Course

    </a>

  </authz:authorize>

 

这里,我们使用了ifAllGranted参数,由于这里只需要检查一个授权,所以ifAllGranted标签也是可以使用的。Web应用的安全性只是Acegi功能的一个方面。现在让我们考察它的另一面——保护方法调用。

   保护方法调用

虽然Acegi保护Web请求的手段是使用Servlet过滤器,它却是利用Spring对AOP的支持来提供方法级别的声明式保护的。这意味着不是设置一个SecurityEnforcementFilter来强制安全性,而是设置一个Spring AOP代理来拦截方法调用,并将控制转交给安全拦截器。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息