SpringBoot SpringSecurity JWT Demo

SpringBoot SpringSecurity JWT Demo

摘要

SpringBoot SpringSecurity JWT Demo

JWT vs Cookie

相比传统的Cookie,使用JWT有些什么好处呢?

  • 跨域:JWT允许向任何服务器或者域名使用ajax,因为JWT是包含在http header中传送数据的,一般用请求头Authorization存储token.
  • 减轻服务端负担:比起使用session来保存cookie,JWT自身包含了所有信息,通过解密即可验证
  • 安全性:因为无需使用cookie,就不必担心劫持cookie的CSRF攻击了
  • 移动端:对于无法使用cookie的一些移动端,JWT能够正常使用

JWT执行过程

首先,用户名+密码登录请求系统.
系统验证通过后,根据用户名生成一个token.
这token串里包含用户名,登录过期时间,加密方法等信息.
例如像下面这个字符串.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9.TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ

可以通过jwt.io进行解密查看里面的信息.
安全性要靠客户端的保证. 不要丢失token.
因为服务器端没办法识别某个合法的token是不是恶意请求.

演示demo

先登录

然后使用返回的token作为Authorization请求其他接口

如果不指明Authorization,会返回401没有权限.

具体哪些接口可以被匿名访问,哪些需要Token,可以在WebSecurityConfig的configure方法中配置.

demo地址

https://coding.net/u/javacore/p/springboot_jwtdemo/git