springboot整合spring security和JSON WEB JOKEN(jwt)实现用户登陆拦截验证

概念
Spring Security 基于 Spring 框架,提供了一套 Web 应用安全性的完整解决方案。一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分。用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统。用户认证一般要求用户提供用户名和密码。系统通过校验用户名和密码来完成认证过程。用户授权指的是验证某个用户是否有权限执行某个操作
JWT是json web token缩写。它将用户信息加密到token里,服务器不保存任何用户信息。服务器通过使用保存的密钥验证token的正确性,只要正确即通过验证。也就是我们常说的令牌机制。

优点是在分布式系统中,很好地解决了单点登录问题,很容易解决了session共享的问题。
缺点是无法作废已颁布的令牌/不易应对数据过期。

JWT 的三个部分依次如下。

Header(头部)
Payload(负载)
Signature(签名)

在这里插入图片描述

Header
Header 部分是一个 JSON 对象,描述 JWT 的元数据,通常是下面的样子。

{
“alg”: “HS256”,
“typ”: “JWT”
}

上面代码中,alg属性表示签名的算法(algorithm),默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),JWT 令牌统一写为JWT。

Payload

Payload 部分也是一个 JSON 对象,用来存放实际需要传递的数据。JWT 规定了7个官方字段,供选用。

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号
除了官方字段,你还可以在这个部分定义私有字段,下面就是一个例子。

{
“sub”: “1234567890”,
“name”: “John Doe”,
“admin”: true
}
注意,JWT 默认是不加密的,任何人都可以读到,所以不要把秘密信息放在这个部分。

这个 JSON 对象也要使用 Base64URL 算法转成字符串。

3.3 Signature
Signature 部分是对前两部分的签名,防止数据篡改。

首先,需要指定一个密钥(secret)。这个密钥只有服务器才知道,不能泄露给用户。然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。

HMACSHA256(
base64UrlEncode(header) + “.” +
base64UrlEncode(payload),
secret)

算出签名以后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就可以返回给用户。

最后,将上面的 JSON 对象使用 Base64URL 算法(详见后文)转成字符串

准备工作
1),开启数据库服务,因为我们的demo需要查询数据库,并创建好rbac数据库表,并录入测试数据。
在这里插入图片描述
在这里插入图片描述
2).搭建一个spring boot工程,并导入 spring security JWT 所需要jar包
在这里插入图片描述
在这里插入图片描述
3)maven仓库下载完成以后,我们写入我们所需要的配置信息
在这里插入图片描述
在这里插入图片描述
这里我们也可以配置连接池。
在这里插入图片描述
4)到此,一个基本的项目环境搭建起来了,我们可以先运行一下,启动过程中是否出错
在这里插入图片描述
正式开始
1).spring security是基于过滤器 拦截请求,实现资源的保护的思想,至于框架底层源码小编也在学习当中,我们可以去官网上面看详细介绍,同时现在网上有很多资料作为参考,首先 我们写好我们的配置
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
2)登陆模拟之前
a.创建实体类,我们可以通过内置mybatis-generator的maven插件生成,后续在做
在这里插入图片描述
在这里插入图片描述
b),我们需要写好先数据访问层的代码,查询用户信息,便于框架基于我们的配置自动调用

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
c),我们可以新建一个service包,注入UserMapper属性。
在这里插入图片描述
d),上面说到,spring security是基于过滤器实现请求拦截,而且我们在上面配置当中 也配置了过滤器,因此我们着手写一个过滤器,在过滤方法当中 生成 验证 我们的 token
在这里插入图片描述
此方法为主要方法
在这里插入图片描述
在这里插入图片描述
小编为了方便 把jwt的各项参数 写进了 属性文件(.properties)以便在spring容器启动时可以加载到该文件,并且我们在程序当中引用
在这里插入图片描述
d),接下来,我们需要写我们的jwt工具类 提供 生成,验证,判断token是否有效,刷新等 token的方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
e),由于在配置中我们写好了认证成功,认证失败,无权限访问的回调,因此,我们也需要新建这三个类文件,来规定我们的的方法回调
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
f),由于我们前台用户登录或访问其他路径时,都需携带token进行认证,这里我们 需要单独提供给一个生成token的接口,根据我们的用户名生成,在配置里面 定义好密码的加密算法。
在这里插入图片描述
在这里插入图片描述
g),我们加入我们的 登陆页面,主页面以及错误页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
f.启动项目 测试,首先我们生成token的接口 ,先生成token
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
g)token生成成功,接下来 我们访问登录接口,并在请求头中带上我们的token信息
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
由于我们配置了登陆成功页面所以当我们认证成功以后 会进入主页面
在这里插入图片描述
h)接下来,我们再次访问登录接口 并提供错误的密码
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
接下来我们访问登陆页面(注意这里请求方式要为get),我们只需在提交表单时 往请求头里放入获取过来的token(客户端可以保存在缓存当中)就可实现认证授权
在这里插入图片描述
springsecurity 相关知识
https://blog.csdn.net/zhoucheng05_13/article/details/60467234
作者:安静的小海豹
来源:CSDN
原文:https://blog.csdn.net/qq_38412637/article/details/85644876
版权声明:本文为博主原创文章,转载请附上博文链接!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值