当前位置: 首页 > 工具软件 > Taglibs > 使用案例 >

Spring Security Taglibs 简介

殷永嘉
2023-12-01

1.概述

在本教程中,我们将了解Spring Security Taglibs,它为访问安全信息和在 JSP 中应用安全约束提供基本支持。

2.Maven依赖

首先,让我们将spring-security-taglibs 依赖添加到我们的pom.xml中:

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-taglibs</artifactId>
    <version>5.2.2.RELEASE</version>
</dependency>

3. 声明标签库

现在,在我们可以使用标签之前,我们需要在 JSP 文件的顶部导入标签库:

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

添加后,我们将能够使用 sec 前缀指定 Spring Security 的标签。

4.授权标签

4.1。 访问表达式

在我们的应用程序中,我们可能拥有只应为某些角色或用户显示的信息。

在这种情况下,我们可以使用 授权标签:

<sec:authorize access="!isAuthenticated()">
  Login
</sec:authorize>
<sec:authorize access="isAuthenticated()">
  Logout
</sec:authorize>

此外,我们可以检查经过身份验证的用户是否具有特定角色:

<sec:authorize access="hasRole('ADMIN')">
    Manage Users
</sec:authorize>

我们可以使用任何Spring Security 表达式 作为我们的 访问值:

  • hasAnyRole('ADMIN','USER')如果当前用户具有任何列出的角色,则返回true
  • 如果当前主体是匿名用户,isAnonymous()返回true
  • 如果当前主体是记住我的用户,isRememberMe()返回true
  • isFullyAuthenticated()如果用户经过身份验证并且既不是匿名用户也不是记住我的用户,则返回true

4.2. 网址

除此之外,我们可以检查被授权向特定 URL 发送请求的用户:

<sec:authorize url="/userManagement">
    <a href="/userManagement">Manage Users</a>
</sec:authorize>

4.3. 调试

在某些情况下,我们可能希望对 UI 进行更多控制,例如在测试场景中。我们可以在application.properties文件中设置spring.security.disableUISecurity = true  , 而不是让 Spring Security 跳过渲染这些未经授权的部分 。

当我们这样做时,授权标签不会隐藏它的内容。相反,它将使用<span class=”securityHiddenUI”>... </span>标签来包装内容。然后,我们可以使用一些 CSS 自定义渲染。

请记住,尽管通过 CSS 隐藏内容并不安全! 用户可以简单地查看源以查看未经授权的内容。

5.认证标签

在其他时候,我们会想要显示登录用户的详细信息,比如说“欢迎回来,卡罗尔!” 在网站上。

为此,我们使用身份验证 标签:

<sec:authorize access="isAuthenticated()">
    Welcome Back, <sec:authentication property="name"/>
</sec:authorize>

6. csrfInput标签

希望我们在我们的应用程序中启用了 Spring Security 的 CSRF 防御!

如果我们这样做了,那么 Spring Security 已经为我们在<form:form>标签内插入了一个 CSRF 隐藏表单输入 。

但是如果我们想使用<form>代替,我们可以使用csrfInput手动指示 Spring Security 应该将这个隐藏的输入字段放置在哪里:

<form method="post" action="/do/something">
    <sec:csrfInput />
    Text Field:<br />
    <input type="text" name="textField" />
</form>

如果未启用 CSRF 保护,则此标签不输出任何内容。

7. csrfMetaTags标签

或者,如果我们想在 Javascript 中访问 CSRF 令牌,我们可能希望将令牌作为元标记插入。

我们可以使用csrfMetaTags 标签来做到这一点:

<html>
    <head>
        <title>JavaScript with CSRF Protection</title>
        <sec:csrfMetaTags />
        <script type="text/javascript" language="javascript">
            var csrfParameter = $("meta[name='_csrf_parameter']").attr("content");
            var csrfHeader = $("meta[name='_csrf_header']").attr("content");
            var csrfToken = $("meta[name='_csrf']").attr("content");
        </script>
    </head>
    <body>
    ...
    </body>
</html>

同样,如果没有启用 CSRF 保护,此标签将不会输出任何内容。

8. 结论

在这篇快速文章中,我们重点介绍了一些常见的 Spring Security taglib 用例。

而且,正如我们所了解的,它们对于呈现身份验证和授权感知 JSP 内容非常有用。

一如既往,所有示例都可以在 Github 上找到。

 类似资料: