3 Star 25 Fork 8

Supreme/springboot

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
Java 加密解密/spring-boot-encry
Jsoup 获取想要的网址的数据
Jsoup
SpringBoot Encryption and decryption 亲测有效
SpringBoot(46) 整合Sa-Token实现权限认证
SpringBoot(47) 整合sharding-jdbc实现分库分表与读写分离
SpringBoot(48) 整合sharding-jdbc实现自定义分库分表
SpringBoot(49) 整合sharding-jdbc和多数据源
SpringBoot(50) Redis多数据源配置
SpringBoot(51)整合Thymeleaf实现图片上传并显示
SpringBoot(52) 整合WebSocket实现在线客服聊天
SpringBoot(53) 整合TLog实现分布式日志标记追踪
SpringBoot(54) 整合Forest实现调用第三方接口
SpringBoot(55) 整合jasypt加密yml配置文件
SpringBoot(56) 整合网易邮箱发送邮件
SpringBoot(57) 实现物流快递查询(阿里云)
SpringBoot(58) 集成Swagger使用swagger-bootstrap-ui页面
SpringBoot(59) 校验表单重复提交
SpringBoot(60) 校验表单重复提交(2)
SpringBoot(61) 获取访问用户的ip
SpringBoot(62) 整合shiro-jwt/springboot-shiro-jwt
SpringBoot(63) 全局处理自定义异常
SpringBoot(64) Redis 监听过期key
SpringBoot(65) 文件上传到另外一台服务器/file-upload-and-download
SpringBoot(66) 整合阿里云api识别身份证图片
SpringBoot(67) 整合阿里云api识别身份证图片的文字并上传图片/file-upload-and-do...
SpringBoot(68) mybatis-plus-generator 代码生成器 1/mybatis-plu...
SpringBoot(68) mybatis-plus-generator 代码生成器
SpringBoot(69) 新建多模块项目
SpringBoot(70) 接口数据加密和解密
SpringBoot(71) 整合shiro jwt
SpringBoot(72) 整合QQ登录 有问题仅供参考/qq login
SpringBoot(73) 整合shiro/code-academy
SpringBoot(74) 整合shiro 账号密码登录 手机号短信登录
SpringBoot(75) 整合 postgresSQL mybatis plus
SpringSecurityDemo
Springboot发送QQ邮件
Springboot整合Druid
Springboot整合Redis
Tingyu-Notes
elasticsearch_demo
email login
email
exception-email
exportExcel excel导出模板/exportExcel
file pdf transform/file-convert-util
github springboot demo/springBoot-demos
java-demo 并发编程
mybatis plus page swagger
rsa-encrypt-body-spring-boot-master
spring-boot-demo
springboot data source
springboot https jsoup
springboot justAuth 第三方码云登录/springboot justAuth
springboot many yml files
springboot minio
springboot mybatis @Select @Update注解使用
springboot mybatis-plus data source
springboot mybatis-plus vue elementui 简单分页
springboot+微信小程序 简单增删改查
springboot-demo/spring-boot-demo
springboot-quartz
springboot-security(杨元)
springboot-security-oauth2-jwt
springboot-security
springboot-shiro-one
springboot-shiro-two
springboot-springsecurity-jwt-demo
.idea
sql
src
.gitignore
LICENSE
README.md
pom.xml
springboot-springsecurity-jwt-demo.iml
springboot-study-master
springboot_quartz_schedule
springboot整合Mybatis-Plus
springboot整合mybatis-plus 简单增删改查
springboot整合swagger
springboot生成二维码/QRCode
xjar 加密springboot jar包
支付
码云 springboot demos/springboot-demos
README.en.md
README.md
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
Loading...
README

一: RestApi接口增加JWT认证功能

用户填入用户名密码后,与数据库里存储的用户信息进行比对,如果通过,则认证成功。传统的方法是在认证通过后,创建sesstion,并给客户端返回cookie。 现在我们采用JWT来处理用户名密码的认证。区别在于,认证通过后,服务器生成一个token,将token返回给客户端,客户端以后的所有请求都需要在http头中指定该token。 服务器接收的请求后,会对token的合法性进行验证。验证的内容包括:

内容是一个正确的JWT格式

检查签名

检查claims

检查权限

处理登录

创建一个类JWTLoginFilter,核心功能是在验证用户名密码正确后,生成一个token,并将token返回给客户端:

该类继承自UsernamePasswordAuthenticationFilter,重写了其中的2个方法:

attemptAuthentication :接收并解析用户凭证。

successfulAuthentication :用户成功登录后,这个方法会被调用,我们在这个方法里生成token。

二:授权验证

用户一旦登录成功后,会拿到token,后续的请求都会带着这个token,服务端会验证token的合法性。

创建JwtAuthenticationFilter类,我们在这个类中实现token的校验功能。

该类继承自BasicAuthenticationFilter,在doFilterInternal方法中,从http头的Authorization 项读取token数据,然后用Jwts包提供的方法校验token的合法性。 如果校验通过,就认为这是一个取得授权的合法请求。

三:SpringSecurity配置

通过SpringSecurity的配置,将上面的方法组合在一起。

这是标准的SpringSecurity配置内容,就不在详细说明。注意其中的

.addFilter(new JWTLoginFilter(authenticationManager())) .addFilter(new JwtAuthenticationFilter(authenticationManager()))

这两行,将我们定义的JWT方法加入SpringSecurity的处理流程中。

四:简单测试

下面对我们的程序进行简单的验证:

1.请求获取用户列表接口:http://localhost:8080/users/userList接口,会收到401错误

{ "timestamp": 1567564486909, "status": 401, "error": "Unauthorized", "message": "Full authentication is required to access this resource", "path": "/users/userList" } curl http://localhost:8080/users/userList
原因就是因为这个url没有授权,所以返回401
输入图片说明

2.注册一个新用户

curl -H "Content-Type: application/json" -X POST -d '{
"username": "admin",
"password": "password"
}' http://localhost:8080/users/signup
输入图片说明

3.登录,会返回token,在http header中,Authorization: Bearer 后面的部分就是token

curl -i -H "Content-Type: application/json" -X POST -d '{
"username": "admin",
"password": "password"
}' http://localhost:8080/login
温馨提醒:这里的login方法是spring specurity框架提供的默认登录url 输入图片说明

4.用登录成功后拿到的token再次请求/users/userList接口

4.1将请求中的XXXXXX替换成拿到的token
4.2这次可以成功调用接口了
curl -H "Content-Type: application/json"
-H "Authorization: Bearer XXXXXX"
"http://localhost:8080/users/userList" 输入图片说明

5.设置了1分钟后Token过期,如果1分钟后再次请求/users/userList接口返回Token过期的异常提示如下图:

输入图片说明

五:建议及改进

若您有任何建议,可以通过发送邮件至827358369@qq.com向我反馈。本人承诺,任何
建议都将会被认真考虑,优秀的建议将会被采用,但不保证一定会在当前版本中实现。

六:集成Swagger-ui,方便前后端分离开发,默认访问地址:http://localhost:8080/swagger-ui.html

输入图片说明 输入图片说明 输入图片说明 温馨提示:这里的登录接口还是使用的默认地址,如果你的token过期了,需要你重新登录生成新的token.

七:微信群

输入图片说明

八:增加了刷新token的机制

输入图片说明 输入图片说明

马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/dongbingya/springboot.git
git@gitee.com:dongbingya/springboot.git
dongbingya
springboot
springboot
master

搜索帮助