这是一个将JWT(JSON Web Token)与Spring Security和Spring Boot结合使用的演示。我完全重写了我的第一个版本。现在这个解决方案基于 JHipster 项目的代码库。我尝试提取 JWT 身份验证所需的最少配置和类,并做了一些更改。
该演示是使用 Maven 3.6.x 和 Java 11 构建的。
只需使用 Spring Boot maven 插件 ( mvn spring-boot:run
) 启动应用程序即可。该应用程序正在 http://localhost:8080 上运行。
您可以使用H2-Console浏览 http://localhost:8080/h2-console 下的数据库:
存在三个用户帐户来演示对 API 中端点的不同访问级别以及不同的授权例外:
Admin - admin:admin
User - user:password
Disabled - disabled:password (this user is deactivated)
对于演示来说,有四个合理的端点:
/api/authenticate - authentication endpoint with unrestricted access
/api/user - returns detail information for an authenticated user (a valid JWT token must be present in the request header)
/api/persons - an example endpoint that is restricted to authorized users with the authority 'ROLE_USER' (a valid JWT token must be present in the request header)
/api/hiddenmessage - an example endpoint that is restricted to authorized users with the authority 'ROLE_ADMIN' (a valid JWT token must be present in the request header)
我编写了一个小型 Javascript 客户端,并在代码中添加了一些注释,希望能让这个演示易于理解。您可以在/src/main/resources/static/js/client.js 中找到它。
我正在使用 bcrypt 对密码进行编码。您可以使用这个简单的工具生成哈希值:Bcrypt Generator
实际上这个demo使用的是Spring Boot自动配置的嵌入式H2数据库。如果要连接到另一个数据库,则必须在资源目录中的application.yml中指定连接。以下是 MySQL 数据库的示例:
spring:
jpa:
hibernate:
# possible values: validate | update | create | create-drop
ddl-auto: create-drop
datasource:
url: jdbc:mysql://localhost/myDatabase
username: myUser
password: myPassword
driver-class-name: com.mysql.jdbc.Driver
提示:对于其他数据库(例如 MySQL),序列不适用于 ID 生成。因此,您必须将实体 bean 中的 GenerationType 更改为“AUTO”或“IDENTITY”。
您可以在此处找到所有应用程序属性的参考。
第81章
该项目有一个 docker 镜像。您可以在 https://hub.docker.com/r/hubae/jwt-spring-security-demo/ 找到它。
如果您有与项目相关的问题,请查看过去的问题或根据您的问题创建新的票证。
如果您有与该项目不直接相关的问题(例如 Spring 框架或 Spring Security 等的常见问题),请搜索网络或查看 Stackoverflow。
抱歉,我现在很忙,没有太多时间。
史蒂芬·泽胡森
该代码是根据 MIT 许可证发布的。
请随时向我发送一些反馈或问题!