`

Spring Security JSP标签库

阅读更多

Chapter 19. JSP标签库

Chapter 19. JSP标签库

Spring Security有它自己的Taglib,提供了JSP中访问权限信息和提供安全约束的功能。

19.1. 声明Taglib

要想使用这些标签,你必须在你的JSP中声明安全taglib:

    <%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>

 

19.2. authorize标签

这个标签用来决定它的内容是否会被执行。在Spring Security 3.0中, 它可以被用在两种方式中[13]。第一个方式是使用 web-security表达式, 指定标签中的access属性。 表达式执行会被WebSecurityExpressionHandlder代理, 这个类定义在application context中(你应该在<http>命名空间配置中 启用了web表达式,并确认这个服务可以使用)。所以,比如,你可能使用

<sec:authorize access="hasRole('supervisor')">

这段内容只能被拥有在他们的<tt>GrantedAuthority</tt>列表中
含有"supervisor"权限的用户才能看到。

</sec:authorize>

一个常见的需求是指显示一个特定的链接,如果用户允许点击它。 怎么让我们进一步决定是否一些事情可以允许呢? 标签也可以用一种可选的模式操作,允许你定义一个特定的URL作为属性。 如果用户允许调用这个URL,标签内容就会被执行, 否则它会被略过。所以,你可能会使用一些像

<sec:authorize url="/admin">

这些内容之会被有权限发送请求到"/admin" URL的用户才可以看到。

</sec:authorize>

为了使用这个标签,必须在你的application context中拥有一个 WebInvocationPrivilegeEvaluator实例。 如果你使用了命名空间,会自动注册一个。这是一个 DefaultWebInvocationPrivilegeEvaluator的实例, 它会创建一个默认web请求对提供的URL,调用安全拦截器来查看请求是成功还是失败的。 这允许你代理到访问控制设置,你使用intercept-url声明在 <http>命名空间中的配置,保存信息(比如必须的角色)在你的JSP中。 这种方式也可以结合method属性,提供HTTP method, 为了更详细的匹配。

19.3.  authentication 标签

这个标签允许访问当前的Authentication对象, 保存在安全上下文中。它直接渲染一个对象的属性在JSP中。 所以,比如,如果Authenticationprincipal属性是Spring Security的 UserDetails对象的一个实例,就要使用 <sec:authentication property="principal.username" /> 来渲染当前用户的名称。

当然,它不必使用JSP标签来实现这些功能,一些人更愿意在视图中保持逻辑越少越好。 你可以在你的MVC控制器中访问Authentication对象 (通过调用SecurityContextHolder.getContext().getAuthentication()) 然后直接在模型中添加数据,来渲染视图。

19.4.  accesscontrollist 标签

这个标签纸在使用Spring Security ACL模块时才可以使用。它检测一个用逗号分隔的 特定领域对象的需要权限列表。如果当前用户拥有这些权限的任何一个,标签内容就会被执行。 否则,就会被略过。一个例子可能像

<sec:accesscontrollist hasPermission="1,2" domainObject="someObject">

 这些将被显示,如果用户拥有指定对象的权限显示为"1"或"2"。

</sec:accesscontrollist>

权限会被传递到PermissionFactory 定义在application context中,把它们转换为ACL的 Permission实例,所以他们可以使用 工厂支持的任何格式 - 不是必须使用整数,它们可以是字符串,像 READ 或者 WRITE。 如果没有找到PermissionFactory, 一个DefaultPermissionFactory实例会被使用。 application context中的AclService会被用来加载 对应的对象的Acl实例。 Acl会被调用,使用需要的权限来检测, 如果它们中的任何一个被授权了。



[13] Spring Security 2.0遗留的方式也是支持的, 但是不推荐使用。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics