码农知识堂 - 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()

  • 相关阅读:
    人民法院报发文:虚拟货币属合法财产,涉案款物不可一律予以没收或者发还
    【【verilog代码异步FIFO的设计解释+源码+tb】】
    Web前端:开发人员如何为React Native App选择合适的数据库?
    前端实现图片复制或者截图直接粘贴到HTML页面
    总账科目 前台操作关事务代码及操作要点
    iOS学习 --- iOS12对象序列化(NSKeyedArchiver/NSKeyedUnarchiver)
    198、RabbitMQ 的核心概念 及 工作机制概述; Exchange 类型 及 该类型对应的路由规则;了解什么是JMS。
    植物大战 类和对象 ——C++
    2024年数学建模美赛详细总结以及经验分享
    前端Vue框架系列—— 学习笔记总结Day02
  • 原文地址:https://blog.csdn.net/weixin_50342605/article/details/127810343
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号