码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 登录模块设计


    项目前台跟后台的认证和授权都是依靠的SpringSecurity。

    思路分析:

    一、认证

    • 登录:

      ①自定义一个类实现UserDetailsService

      • 改为查询数据库,将查询到的用户信息以及权限信息封装到一个UserDatails对象(自定义一个类实现UserDetails,后面做授权的时候还需要返回用户权限信息)中。

      • 配置passwordEncoder密码校验为BCrptPasswordEncoder

      ②自定义登录接口

      • 调用ProviderManger的方法验证用户名跟密码是否正确(项目中使用它的实现类AuthenticationManager,需要在配置类继承WebSecurityConfigurerAdapter来完成注入)

      • 验证通过的话获取userid生成token

      • 将userid作为key,用户信息作为value存储到redis中

      • 响应给用户一个token。

    • 校验:

      ①自定义Jwt认证过滤器

      获取token

      解析token获取userid

      根据userid去redis中查询对应用户信息

      存入SecurityContextHolder

      ②将自定义的Jwt认证过滤器添加到过滤器链中

    二、授权

    前台系统暂无需求,后面设计后台管理系统时再考虑授权

    三、认证授权失败处理

    分别实现:

    • AuthenticationEntryPoint 认证失败处理器

    • AccessDeniedHandler 授权失败处理器

    然后在Securityconfig中配置异常处理器

    四、退出登录接口

    获取SecurityContext中的认证信息,然后删除redis中对应的数据即可

    1. @Override
    2. public ResponseResult logout() {
    3.    //获取token 解析获取userid
    4.    Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
    5.    LoginUser loginUser = (LoginUser) authentication.getPrincipal();
    6.    //获取userid
    7.    Long userId = loginUser.getUser().getId();
    8.    //删除redis中的用户信息
    9.    redisCache.deleteObject("bloglogin:"+userId);
    10.    return ResponseResult.okResult();
    11. }

    在Securityconfig中配置:

    • 关闭Security自身的退出接口

    • 注销接口需要认证才能访问

    1. http.logout().disable();
    2. //注销接口需要认证才能访问
    3. http.antMatchers("/logout").authenticated()

  • 相关阅读:
    【云原生之kubernetes实战】在k8s环境下部署kanboard项目管理平台
    Linux常见的指令合集
    科研宝典·工具篇 | CiteSpace: 科学文献分析
    【云计算】三种云服务
    解决Jenkins执行git脚本时报错:No such device or address问题
    ::before 和 :after中双冒号和单冒号有什么区别?解释一下这2个伪元素的作用
    从0开始的计组学习!让我们踏上计组的奇妙学习之旅叭~
    笔记本无线网卡天线接线柱掉了(AUX和MAIN两个接口)
    深度学习基础与线性回归实例
    Enzo丨Enzo IHC酶抗原回收试剂解决方案
  • 原文地址:https://blog.csdn.net/weixin_50342605/article/details/127810343
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号