没有合适的资源?快使用搜索试试~ 我知道了~
SpringBoot整合Spring Security.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 32 浏览量
2022-07-03
11:21:30
上传
评论
收藏 690KB DOCX 举报
温馨提示
试读
22页
Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。提供了完善的 认证机制 和方法级的 授权功能 。是一款非常优秀的权限管理框架。它的核心是一组过滤器链,不同的功能经由不同的过滤器。这篇文章就是想通过一个小案例将Spring Security整合到SpringBoot中去。要实现的功能就是在认证服务器上登录,然后获取Token,再访问资源服务器中的资源。
资源推荐
资源详情
资源评论
SpringBoot 整合 Spring Security
Spring Security 是一个功能强大且高度可定制的身份验证和访问控制框架。提供
了完善的 认证机制 和方法级的 授权功能 。是一款非常优秀的权限管理框架。
它的核心是一组过滤器链,不同的功能经由不同的过滤器。这篇文章就是想通过
一个小案例将 Spring Security 整合到 SpringBoot 中去。要实现的功能就是在认
证服务器上登录,然后获取 Token,再访问资源服务器中的资源。
基本概念
� ### 单点登录
什么叫做单点登录呢。就是在一个多应用系统中,只要在其中一个系统上登录之
后,不需要在其它系统上登录也可以访问其内容。举个例子,京东那么复杂的系
统肯定不会是单体结构,必然是微服务架构,比如订单功能是一个系统,交易是
一个系统......那么我在下订单的时候登录了,付钱难道还需要再登录一次吗,如
果是这样,用户体验也太差了吧。实现的流程就是我在下单的时候系统发现我没
登录就让我登录,登录完了之后系统返回给我一个 Token,就类似于身份证的东
西;然后我想去付钱的时候就把 Token 再传到交易系统中,然后交易系统验证
一下 Token 就知道是谁了,就不需要再让我登录一次。
� ### JWT
上面提到的 Token 就是 JWT(JSON Web Token) ,是一种用于通信双方之间传
递安全信息的简洁的、URL 安全的表述性声明规范。一个 JWT 实际上就是一个
字符串,它由三部分组成,头部、载荷与签名。为了能够直观的看到 JWT 的结
构,我画了一张思维导图:
最终生成的 JWT 令牌就是下面这样,有三部分,用 . 分隔。
base64UrlEncode(JWT 头)+"."+base64UrlEncode(载
荷)+"."+HMACSHA256(base64UrlEncode(JWT 头) + "." +
base64UrlEncode(有效载荷),密钥)
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NT
Y3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.
TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ
� ### RSA
从上面的例子中可以看出,JWT 在加密解密的时候都用到了同一个密钥
“ robod666 ”,这将会带来一个弊端,如果被黑客知道了密钥的内容,那么他就
可以去伪造 Token 了。所以为了安全,我们可以使用非对称加密算法 RSA 。
RSA 的基本原理有两点:
� 私钥加密,持有私钥或公钥才可以解密
� 公钥加密,持有私钥才可解密
认证服务器用户登录功能
前期准备
介绍完了基本概念之后就可以开始整合了,受限于篇幅,只贴最核心的代码,其
它内容请小伙伴们去源码中找,地址在文末。 首先需要准备好数据库:
-- ----------------------------
-- Table structure for sys_role
-- ----------------------------
DROP TABLE IF EXISTS `sys_role`;
CREATE TABLE `sys_role` (
`ID` int(11) NOT NULL AUTO_INCREMENT COMMENT '编号',
`ROLE_NAME` varchar(30) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NU
LL COMMENT '角色名称',
`ROLE_DESC` varchar(60) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NU
LL COMMENT '角色描述',
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 6 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW
_FORMAT = Compact;
-- ----------------------------
-- Records of sys_role
-- ----------------------------
INSERT INTO `sys_role` VALUES (1, 'ROLE_USER', '基本角色');
INSERT INTO `sys_role` VALUES (2, 'ROLE_ADMIN', '超级管理员');
INSERT INTO `sys_role` VALUES (3, 'ROLE_PRODUCT', '管理产品');
INSERT INTO `sys_role` VALUES (4, 'ROLE_ORDER', '管理订单');
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT
'用户名称',
`password` varchar(120) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT
'密码',
`status` int(1) NULL DEFAULT 1 COMMENT '1 开启 0 关闭',
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 4 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW
_FORMAT = Compact;
剩余21页未读,继续阅读
资源评论
小兔子平安
- 粉丝: 210
- 资源: 1940
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功