spring security的使用

正常做项目校验用户和权限都需要经过这几步:

       (1)、校验用户的账号密码,校验失败给用户的提示

       (2)、用户密码校验成功后的操作

       (3)、用户在操作某个方法时校验用户是否有这个方法的权限,如果没有权限给与提示

         security是一个权限校验框架,对以上这些功能都提供了相应的接口,我们只需要实现这些接口即可;

    本文最后链接会有一个demo,使用了mysql、redis,大致逻辑是用户在登录时校验账号密码,校验成功则查询用户拥有的方法权限封装成一个对象放在redis中(键是userId),然后使用jwt对userId加密生成token返回给客户端,用户做其他操作的时候将token传到服务端,服务端解析token获得userId,然后根据userId从redis中获得用户的方法权限,然后检验当前用户访问的方法;

我以下面的项目简单说明一下登录流程:

   首先启动 SanGengTokenDemo,使用postMan等工具访问:http://localhost:8888/user/login

        Security的配置类SecurityConfig,配置一些全局的配置;

        1、 在login方法中将 用户和密码封装成UsernamePasswordAuthenticationToken,然后调用 authenticate 方法 校验用户的账号密码、查询用户的权限封装成 LoginUser,在这一步中我们需要实现 UserDetailsService的 loadUserByUsername 接口 用于 校验账号密码、查询用户权限;

        2、获得用户信息后使用JWT将userId 生成token 返回客户端,并将 loginUser 放入到redis中;

        3、校验用户或账号密码失败的接口 AuthenticationEntryPoint.commence ,我们只需要实现这个方法并在 SecurityConfig 配置,校验失败时就会执行

        4、权限校验失败的接口 AccessDeniedHandler.handle,我们只需要实现这个方法并在 SecurityConfig 配置,用户没有方法权限时就会执行

        5、方法权限的校验

            (1)、security 提供了四种权限校验方法,是在方法上面添加注解实现,参考 HelloController 中的 hello 方法,一般不使用这种方式,一个方法通常要被很多个角色访问,这种配置很繁琐

           (2)、在全局过滤器中 从 loginUser 中获得用户拥有的权限,判断是否包含当前的url;     

根据用户查询用户信息:

校验密码:根据注入的passwordEncoder来进行密码的校验,passwordEncoder是在SecurityConfig中注入的BCryptPasswordEncoder,所以数据库中存储的也是加密后的密码,如:passwordEncoder.encode("1234"),见MapperTest;

 

       

学习视频地址:SpringSecurity框架教程-Spring Security+JWT实现项目级前端分离认证授权-B站最通俗易懂的Spring Security课程_哔哩哔哩_bilibili

下面附件是实现的demo及方法调用:

 

代码链接:https://pan.baidu.com/s/1XzcHKWs7pIcBydLiRlazAA?pwd=ps1r 

数据库脚本:链接:https://pan.baidu.com/s/1RCIM330FsrPbFzyGXB5hqA?pwd=dq9p 
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值