在本教程中,我们将了解Spring Security Taglibs,它为访问安全信息和在 JSP 中应用安全约束提供基本支持。
首先,让我们将spring-security-taglibs 依赖添加到我们的pom.xml中:
- <dependency>
- <groupId>org.springframework.securitygroupId>
- <artifactId>spring-security-taglibsartifactId>
- <version>5.2.2.RELEASEversion>
- dependency>
现在,在我们可以使用标签之前,我们需要在 JSP 文件的顶部导入标签库:
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags" %>
添加后,我们将能够使用 sec 前缀指定 Spring Security 的标签。
在我们的应用程序中,我们可能拥有只应为某些角色或用户显示的信息。
在这种情况下,我们可以使用 授权标签:
- <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 表达式 作为我们的 访问值:
除此之外,我们可以检查被授权向特定 URL 发送请求的用户:
- <sec:authorize url="/userManagement">
- <a href="/userManagement">Manage Usersa>
- sec:authorize>
在某些情况下,我们可能希望对 UI 进行更多控制,例如在测试场景中。我们可以在application.properties文件中设置spring.security.disableUISecurity = true , 而不是让 Spring Security 跳过渲染这些未经授权的部分 。
当我们这样做时,授权标签不会隐藏它的内容。相反,它将使用... 标签来包装内容。然后,我们可以使用一些 CSS 自定义渲染。
请记住,尽管通过 CSS 隐藏内容并不安全! 用户可以简单地查看源以查看未经授权的内容。
在其他时候,我们会想要显示登录用户的详细信息,比如说“欢迎回来,卡罗尔!” 在网站上。
为此,我们使用身份验证 标签:
- <sec:authorize access="isAuthenticated()">
- Welcome Back, <sec:authentication property="name"/>
- sec:authorize>
希望我们在我们的应用程序中启用了 Spring Security 的 CSRF 防御!
如果我们这样做了,那么 Spring Security 已经为我们在
但是如果我们想使用代替,我们可以使用csrfInput手动指示 Spring Security 应该将这个隐藏的输入字段放置在哪里:
- <form method="post" action="/do/something">
- <sec:csrfInput />
- Text Field:<br />
- <input type="text" name="textField" />
- form>
如果未启用 CSRF 保护,则此标签不输出任何内容。
或者,如果我们想在 Javascript 中访问 CSRF 令牌,我们可能希望将令牌作为元标记插入。
我们可以使用csrfMetaTags 标签来做到这一点:
- <html>
- <head>
- <title>JavaScript with CSRF Protectiontitle>
- <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 保护,此标签将不会输出任何内容。
在这篇快速文章中,我们重点介绍了一些常见的 Spring Security taglib 用例。
而且,正如我们所了解的,它们对于呈现身份验证和授权感知 JSP 内容非常有用。
一如既往,所有示例都可以在 Github 上找到。