权限验证

  • 1)首先要写一个spring security配置类(继承WebSecurityConfigurationAdapter),用于设置springsecurity的控制默认权限,让springsercurity放行所有请求,但是要求任何请求必须是被验证过的。
    @configuration
    @EnableWebSercurity
    两个注解
  • 2)将加密工具类注入注入到启动类(容器中)中
    @Bean
    public BCryptPasswordEncoder encoder(){
    return new BCryptPasswordEncoder();
    }
  • 3)写一些正常的CRUD操作,
    并将BCryptPasswordEncoder()注入到Service类中
    在add方法中增加一行admin.setPassword(encode.encode(admin.getPassword());
    这样的话保存在数据库中的密码就是加盐过的了。
    4)写登录方法
    controller login:
    根据用户名和密码,以json格式提交给后端,后端去数据库得到这个对象的所有信息(adminService.login(admin))

    密码验证后,登录成功,需要返回一个标识给前端,前端的session中保存这个标识
    采用JWT来实现…

servicelogin:
controllor将登陆信息(账号和密码)传过来,先通过账号去数据库得到数据库用户的信息,
再拿数据库密码与登陆密码做验证(其实是两个admin对象的对比 )
encoder(BCryptPasswordEncoder对象).matches(admin.getPassword(),adminLogin.getPassword();

在这里插入图片描述

jwt也是无状态的:浏览器有cookie,服务端有session,cookie保存登陆信息,session连接
令牌:尚方宝剑,
服务端并不存这个令牌。
令牌的好处就是服务端不存这个信息,
如果存,一般存在session中,session中的存取跨平台,且有开销。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

jwt是String:
头部:{“typ”:“JWT”,“alg”:“HS256”}
载荷:载荷就是存放有效信息的地方。这个名字像是特指飞机上承载的货品
签名:
这3部分用Base64加密后的生成字符串
在这里插入图片描述


载荷的内容:

一、标注中声明

  1. List item
  2. iss: jwt签发者
  3. sub: jwt所面向的用户
  4. aud: 接收jwt的一方
  5. exp: jwt的过期时间,这个过期时间必须要大于签发时间
  6. nbf: 定义在什么时间之前,该jwt都是不可用的.
  7. iat: jwt的签发时间
  8. jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击

二、公共声明:无所谓 三、私有声明:无所谓 这三部分