「这是我参与11月更文挑战的第29天,活动详情查看:2021最后一次更文挑战」
确保Web应用程序的安全是一个固有的复杂命题。Spring Security为Java开发者提供了一个强大的框架来满足这一需求,但这一强大的工具伴随着一个陡峭的学习曲线。
本文简要介绍了用Spring Security保护REST API背后的基本组件。我们将建立一个简单的应用,使用JSON Web Token(JWT)来存储用户的信息。
JWT由于其简单性和紧凑性,正在迅速成为持有授权信息的标准方法。
一个简单的安全REST API
下面是我们想让我们的简单应用做的事情。
- 提供一个带有按钮的用户界面,向后端端点发送一个请求。
- 提供一个用户名和密码字段供用户登录。
- 如果API按钮被点击,而用户没有登录,则用 "HTTP 401 Forbidden "响应拒绝端点调用。
- 如果用户已经登录,就向他们发送来自端点的响应。
这个简单的应用将展示使用Spring与JWT来保护REST API所需的所有组件。
在我们开始之前,我会给你一个鸟瞰图,然后对项目中的每个文件访问一次,以突出最重要的元素。
项目文件和布局见于图1的红色高亮区域。
图 1. 一个简单的安全 REST API 项目。
示例应用程序中涉及的类文件列在下面(链接到它们的来源)。
JwtApplication.java
。主应用程序文件,由Spring Boot创建。- JWTTokenService.java。
TokenAuthenticationService
使用的TokenService
的实现。 - MyController.java。包含受保护端点的网络控制器。
- NoRedirectStrategy。在
SecurityConfig.java
中使用,以避免Spring Security的默认重定向行为。 SecurityConfig.java
。负责配置Spring Security。TokenAuthenticationFilter.java
。负责在请求安全资源时检查用户认证信息。由SecurityConfig.java
应用。TokenAuthenticationProvider.java
。由SecurityConfig.java``提供
给AuthenticationManager,以提供一种恢复TokenAuthenticationFilter
中用户的方法。TokenAuthenticationService.java
。UserAuthenticationService
的基于token的实现。- TokenService.java。
TokenAuthenticationService
用于创建和验证JWTtoken。由JWTTokenService
实现。 - User.java。一个Spring
UserDetails
接口的简单实现。用来保存用户信息。 UserAuthenticationService.java
。一个中间件服务。被UserController.java
用来处理登录的业务逻辑,被TokenAuthenticationProvider
用来按token查找用户。UserController.java
。提供登录API的网络控制器。UserService.java
:一个用于查找用户的接口。由TokenAuthenticationService
使用,通过token信息恢复用户。- UserServiceImpl.java。
UserService.java
的实现。在这种情况下,是一个简单的用户集合。
为了使事情尽可能简单,使你更容易理解,我抛弃了Java的最佳做法,把你要用的所有类放在一个包里。
还有一个index.html
文件为来自/resources/static
的简单前端服务。
感谢观看,如果您有兴趣,可以关注一下我,方便查看后续文章,一起学习,共同进步,不胜感激!