30. JSP Tag Libraries

Spring Security有自己的标签库,为访问安全信息和在JSP中应用安全约束提供基本支持。

30.1 Declaring the Taglib

要使用任何标签,您必须在JSP中声明安全标签库:

 


 

30.2 The authorize Tag

该标记用于确定是否应该对其内容进行评估。在Spring Security 3.0中,它有两种使用方式[21]。第一种方法使用在标签的access 属性中指定的网络安全表达式。表达式评估将委托给在应用程序上下文中定义的SecurityExpressionHandler(您应该在< http >命名空间配置中启用web表达式,以确保此服务可用)。例如,你可能有

30. JSP Tag Libraries_第1张图片
 

当与Spring Security的PermissionEvaluator结合使用时,该标记还可以用来检查权限。例如:

 

30. JSP Tag Libraries_第2张图片
 

一个常见的要求是只显示一个特定的链接,如果用户实际上被允许点击它。我们如何事先决定某事是否被允许?这个标签也可以在另一种模式下运行,允许你定义一个特定的网址作为属性。如果用户被允许调用该网址,那么标签体将被评估,否则将被跳过。所以你可能会有类似

30. JSP Tag Libraries_第3张图片
 

要使用这个标记,您的应用程序上下文中还必须有一个WebInvocationPrivilegeEvaluator的实例。如果您正在使用命名空间,将自动注册一个。这是DefaultWebinvokationPrivilegeValuetor的一个实例,它为所提供的网址创建一个虚拟的web请求,并调用安全拦截器来查看该请求是成功还是失败。这允许您将< http >命名空间配置中的拦截url声明委托给您定义的访问控制设置,并避免在您的JSP中复制信息(如所需的角色)。这种方法也可以与一个方法属性相结合,提供一个更具体的匹配。

通过将var属性设置为变量名,可以将评估标记的布尔结果(无论是授予还是拒绝访问)存储在页面上下文范围变量中,从而避免在页面中的其他位置复制和重新评估条件。

30.2.1 Disabling Tag Authorization for Testing

为未授权用户隐藏页面中的链接并不能阻止他们访问该网址。例如,他们可以直接把它输入浏览器。作为测试过程的一部分,您可能想要揭示隐藏区域,以便检查链接在后端是否真正安全。如果您将系统属性spring . security . disableuisecurity设置为true,则授权标记仍将运行,但不会隐藏其内容。默认情况下,它还会在内容周围加上标签。这允许你用特殊的CSS样式显示“隐藏”的内容,比如不同的背景颜色。例如,尝试运行启用了此属性的“教程”示例应用程序。

如果要从默认范围标记中更改周围的文本(或使用空字符串将其完全删除),还可以设置属性spring . security . secureduiprefix和spring . security . secureduisffix。

30.3 The authentication Tag

此标签允许访问存储在安全上下文中的当前身份验证对象。它直接在JSP中呈现对象的属性。例如,如果身份验证的主体属性是Spring Security的UserDetails对象的实例,那么使用< sec:Authentication property = " principal . username "/>将呈现当前用户的名称。

当然,这种事情没有必要使用JSP标签,有些人更喜欢在视图中保持尽可能少的逻辑。您可以通过SecurityContextHolder.getContext().getAuthentication()并将数据直接添加到模型中,以便由视图呈现。

30.4 The accesscontrollist Tag

此标签仅在与Spring Security的ACL模块一起使用时有效。它检查指定域对象所需权限的逗号分隔列表。如果当前用户拥有所有这些权限,那么将对标记体进行评估。如果他们没有,它将被跳过。例如

30. JSP Tag Libraries_第4张图片
 

权限被传递给应用程序上下文中定义的权限工厂,将它们转换为ACL权限实例,因此它们可以是工厂支持的任何格式——它们不必是整数,它们可以是像读或写这样的字符串。如果找不到权限工厂(PermissionFactory ),将使用DefaultPermissionFactory的实例。应用程序上下文中的AclService将用于为提供的对象加载Acl实例。将使用所需的权限调用Acl,以检查是否所有权限都已授予。

这个标签也支持var属性,就像授权标签一样。

30.5 The csrfInput Tag

如果启用了CSRF保护,此标记将插入一个隐藏的表单字段,其中包含CSRF保护令牌的正确名称和值。如果未启用CSRF保护,此标签不输出任何内容。通常,Spring Security会为您使用的任何< form:form >标记自动插入一个CSRF表单域,但是如果由于某种原因您不能使用< form:form >,csrfInput是一个方便的替代。

您应该将此标签放在一个HTML

块中,在这里您通常会放置其他输入字段。请勿将此标签放在spring块中。spring安全自动处理spring形状。

30.6 The csrfMetaTags Tag

如果启用了CSRF保护,此标签将插入包含CSRF保护令牌表单字段、标头名称和CSRF保护令牌值的元标签。这些元标签对于在您的应用程序中使用JavaScript中的CSRF保护非常有用。

您应该在一个HTML 块中放置csrfMetaTags,在这里您通常会放置其他的meta标记。一旦使用了这个标记,就可以使用JavaScript轻松地访问表单字段名称、标题名称和标记值。本例中使用了JQuery来简化任务。

30. JSP Tag Libraries_第5张图片
 
30. JSP Tag Libraries_第6张图片
 

如果未启用CSRF保护,csrfMetaTags将不输出任何内容。

 

你可能感兴趣的:(30. JSP Tag Libraries)