如果国内访问缓慢的话,可以通过码云查看: https://gitee.com/SnailClimb/spring-security-jwt-guide 。
Spring Security 是 Spring 全家桶中非常强大的一个用来做身份验证以及权限控制的框架,我们可以轻松地扩展它来满足我们当前系统安全性这方面的需求。
但是 Spring Security 相比于其他一些技术比如 JPA 来说更难上手,很多人初学的时候很难通过看视频或者文档发就很快能独立写一个 Demo 出来,于是后面可能就放弃了学习这个东西。
刚来公司的时候的入职培训实战项目以及现在正在做的项目都用到了 Spring Security 这个强大的安全验证框架,可以看出这个框架在身份验证以及权限验证领域可以说应该是比较不错的选择。由于之前经历项目的这部分模块都不是自己做的,所以对于 Spring Security 并不是太熟悉。于是自/己抽时间对这部分知识学习了一下,并实现了一个简单的 Demo 。这个 Demo 主要用到了 Spring Security 和 Spring Boot 这两门技术,并且所有的依赖采用的都是最新的稳定版本。初次之外,这个项目还用到了 JPA 这门技术。
由于自己的能力以及时间有限,所以一定还有很多可以优化的地方,有兴趣的朋友可以一起完善,期待你的 PR。
项目用到的一些框架/服务:
你能从这个项目中学习到什么?
为了区分,我把 Spring Security相关的都单独放在了一个文件夹下面。
application.yaml
中redis的配置URL:
POST http://localhost:9333/api/users/sign-up
RequestBody:
{"userName":"123456","fullName":"shuangkou","password":"123456"}
新注册的用户默认绑定的角色为:用户(USER)和管理者(MANAGER)。
URL:
POST http://localhost:9333/api/auth/login
RequestBody:
{"username": "123456", "password": "123456","rememberMe":true}
我们使用 GET 请求访问 /api/users
,这个接口的访问权限是
@PreAuthorize("hasAnyRole('ROLE_USER','ROLE_MANAGER','ROLE_ADMIN')")
我们使用 GET 请求访问 /api/users
,但是不带token或者带上无效token。
我们使用 DELETE 请求访问 /api/users?username=xxx
,携带有效的 token ,但是 token 的访问权限不够。