基于 Spring Security 和 JWT 的权限系统设计

栏目: 后端 · 发布时间: 5年前

内容简介:文章共 1209字,阅读大约需要 5分钟,文尾有计时器可自行对时!

基于 Spring Security 和 JWT 的权限系统设计

文章共 1209字,阅读大约需要 5分钟,文尾有计时器可自行对时!

写在前面

  • 关于 Spring Security

Web系统的认证和权限模块也算是一个系统的基础设施了,几乎任何的互联网服务都会涉及到这方面的要求。在Java EE领域,成熟的安全框架解决方案一般有 Apache Shiro、Spring Security等两种技术选型。Apache Shiro简单易用也算是一大优势,但其功能还是远不如 Spring Security强大。Spring Security可以为 Spring 应用提供声明式的安全访问控制,起通过提供一系列可以在 Spring应用上下文中可配置的Bean,并利用 Spring IoC和 AOP等功能特性来为应用系统提供声明式的安全访问控制功能,减少了诸多重复工作。

  • 关于JWT

JSON Web Token (JWT),是在网络应用间传递信息的一种基于 JSON的开放标准((RFC 7519),用于作为JSON对象在不同系统之间进行安全地信息传输。主要使用场景一般是用来在 身份提供者和服务提供者间传递被认证的用户身份信息。关于JWT的科普,可以看看阮一峰老师的《JSON Web Token 入门教程》。

本文则结合 Spring Security和 JWT两大利器来打造一个简易的权限系统。

另外本文实验代码置于文尾,需要自取!

本文实验环境如下:

  • Spring Boot版本:2.0.6.RELEASE

  • IDE:IntelliJ IDEA 2018.2.4

注:  本文首发于 作者 公众号  CodeSheep  ,可  长按  扫描  下面的  小心心  来订阅 ↓ ↓ ↓

基于 Spring Security 和 JWT 的权限系统设计

设计用户和角色

本文实验为了简化考虑,准备做如下设计:

  • 设计一个最简角色表 role ,包括   角色ID  角色名称

基于 Spring Security 和 JWT 的权限系统设计

  • 设计一个最简用户表 user ,包括   用户ID  用户名  密码

基于 Spring Security 和 JWT 的权限系统设计

  • 再设计一个用户和角色一对多的关联表 user_roles   一个用户可以拥有多个角色

    基于 Spring Security 和 JWT 的权限系统设计

创建Spring Security和JWT加持的Web工程

  • pom.xml   中引入 Spring Security和 JWT所必需的依赖

  • 项目配置文件中加入数据库和 JPA等需要的配置

  • 创建用户、角色实体

用户实体 User:

此处所创建的 User类继承了 Spring Security的 UserDetails接口,从而成为了一个符合 Security安全的用户,即通过继承 UserDetails,即可实现 Security中相关的安全功能。

角色实体 Role:

  • 创建JWT工具类

主要用于对 JWT Token进行各项操作,比如生成Token、验证Token、刷新Token等

  • 创建Token过滤器,用于每次外部对接口请求时的Token处理

  • Service业务编写

主要包括用户登录和注册两个主要的业务

  • Spring Security配置类编写( 非常重要

这是一个高度综合的配置类,主要是通过重写 WebSecurityConfigurerAdapter   的部分   configure 配置,来实现用户自定义的部分。

  • 编写测试 Controller

登录和注册的 Controller:

再编写一个测试权限的 Controller:

这里给出两个测试接口用于测试权限相关问题,其中接口 /normal/test 需要用户具备普通角色(   ROLE_NORMAL )即可访问,而接口   /admin/test 则需要用户具备管理员角色(   ROLE_ADMIN )才可以访问。

接下来启动工程,实验测试看看效果

实验验证

  • 在文章开头我们即在用户表 user 中插入了一条用户名为   codesheep 的记录,并在用户-角色表   user_roles 中给用户   codesheep 分配了普通角色(   ROLE_NORMAL )和管理员角色(   ROLE_ADMIN

  • 接下来进行用户登录,并获得后台向用户颁发的JWT Token

基于 Spring Security 和 JWT 的权限系统设计

  • 接下来访问权限测试接口

不带 Token直接访问需要普通角色( ROLE_NORMAL )的接口   /normal/test 会直接提示访问不通:

基于 Spring Security 和 JWT 的权限系统设计

而带 Token访问需要普通角色( ROLE_NORMAL )的接口   /normal/test 才会调用成功:

基于 Spring Security 和 JWT 的权限系统设计

同理由于目前用户具备管理员角色,因此访问需要管理员角色( ROLE_ADMIN )的接口   /admin/test 也能成功:

基于 Spring Security 和 JWT 的权限系统设计

接下里我们从用户-角色表里将用户 codesheep 的管理员权限删除掉,再访问接口   /admin/test ,会发现由于没有权限,访问被拒绝了:

基于 Spring Security 和 JWT 的权限系统设计

经过一系列的实验过程,也达到了我们的预期!

写在最后

本文涉及的东西还是蛮多的,最后我们也将本文的实验源码放在 Github上,需要的可以自取:

github.com/hansonwang99/Spring-Boot-In-Action/tree/master/springbt_security_jwt

由于能力有限,若有错误或者不当之处,还请大家批评指正,一起学习交流!

个人网站: www.codesheep.cn (程序羊)

我的更多系列原创文章在此:

●   程序羊的2018年终总(gen)结 (feng)

●   利用K8S技术栈打造个人私有云 系列连载文章

●   从一份配置清单详解Nginx服务器配置

●   Spring Boot Admin 2.0开箱体验

●   一文上手 Elasticsearch常用可视化管理工具

●   Docker容器可视化监控中心搭建

●   利用ELK搭建 Docker 容器化应用日志中心

●   RPC框架实践之:Google gRPC

●   一文详解 Linux 系统常用监控工具

作者更多 务实、能看懂、可复现的 原创文章尽在公众号 CodeSheep ,欢迎订阅 :arrow_down::arrow_down::arrow_down:

基于 Spring Security 和 JWT 的权限系统设计

你花了    ·   来阅读

点个  基于 Spring Security 和 JWT 的权限系统设计  再走吧~  

点阅读原文, 去作者官网codesheep.cn阅读


以上所述就是小编给大家介绍的《基于 Spring Security 和 JWT 的权限系统设计》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

算法分析-有效的学习方法(影印版)

算法分析-有效的学习方法(影印版)

Jeffrey J.McConnell / 高等教育出版社 / 2003-03-01 / 28.0

本书主要目标是提高读者关于算法对程序效率的影响等问题的认知水平,并培养读者分析程序中的算法所必需的技巧。各章材料以激发读者有效的、协同的学习方法的形式讲述。通过全面的论述和完整的数学推导,本书帮助读者最大限度地理解基本概念。 本书内容包括促使学生参与其中的大量程序设计课题。书中所有算法以伪码形式给出,使得具备条件表达式、循环与递归方面知识的读者均易于理解。本书以简洁的写作风格向读者介绍了兼具......一起来看看 《算法分析-有效的学习方法(影印版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

在线进制转换器
在线进制转换器

各进制数互转换器

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具