恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

SpringSecurity+jwt+captcha登录认证授权总结

  • 首页
  • 资讯中心
  • /
  • SpringSecurity+jwt+captcha登录认证授权总结

相关资讯

多平台语音播报Demo实战:从TTS选型到核心代码实现 2026/9/3 22:51:36
无刷电机与Mesh 2.0加持,科思顿Smart6电动窗帘体验如何? 2026/9/3 22:46:36
Ice:macOS 菜单栏管理实用工具 2026/9/3 22:46:36

最新资讯

ScopeFIR实战:401阶FIR低通滤波器设计全流程
K230边缘AI视觉开发:从模型训练到电赛部署全流程解析
AI数据中心供电瓶颈:燃气轮机叶片铸造为何成关键
开源许可证检测工具 License Detector:原理、安装与CI/CD集成指南
别再手动排论文格式❗OKBIYE一键搞定全校规范|零扣分上岸
离子推进与核热火箭:突破化学火箭极限的星际航行技术

今日推荐

零基础装 OpenClaw 小龙虾 AI:Windows 一键部署教程与避坑要点
Hermes Agent 本地部署新方案:Windows 整合包减少依赖报错
实测 OpenClaw 一键包,5 分钟完成本地自动化环境搭建

本周热门

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析
数字电路时序基石:深入理解建立时间与保持时间
蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

本月精选

自研推理加速器Redwood:两周内实现PyTorch模型高效部署的实战教程
V4L2摄像头采集实战:从camera_client.rar到出图全流程解析
从“谁发明了钢琴键”到知识问答智能体:RAG与记忆工程实践

SpringSecurity+jwt+captcha登录认证授权总结

发布时间:2026/9/3 22:51:36
SpringSecurity+jwt+captcha登录认证授权总结 SpringSecurityjwtcaptcha登录认证授权总结版本信息springboot 3.2.0、springSecurity 6.2.0、mybatis-plus 3.5.5认证授权思路和流程未携带token访问登录接口1、用户登录携带账号密码2、请求到达自定义Filter自定义Filter(如JwtAuthenticationTokenFilter)继承OncePerRequestFilter(此Filter只会进行一次过滤在请求返回时不会再进行调用)在SecurityConfig中配置将自定义Filter添加到过滤器链中并加在UsernamePasswordAuthenticationFilter过滤器之前3、自定义Filter逻辑3.1、查询到用户未携带token直接放行进入到后面认证流程3.2、将用户信息封装成Authentication对象调用authticate()方法进行验证一直到DaoAuthenticationProvider中会调用UserDetailService的loadUserByUserName()方法自定义UserDetailServiceImpl继承UserDetailService接口重写其loadUserByUserName()方法查到用户后封装成UserDetail对象返回4、调用passwordEncoder的验证方法进行用户信息的认证(一般使用BCryptPasswordEncoder创建此Bean并放入容器中)5、认证通过后使用JWT创建token并放到redis中返回token到前端携带token访问1、请求到达自定义Filter中获取token先验证token的正确性从token中获取到userId根据userId从redis中获取用户信息将用户信息封装成Authentication对象放进SecurityContextHolder中后面的过滤器会在SecurityContextHolder中获取用户的信息2、请求到达FilterSecurityInterceptor在springSecurity中默认使用FilterSecurityInterceptor来进行权限校验FilterSecurityInterceptor会从SecurityContextHolder中获取Authentication然后获取其中的权限信息判断当前用户是否拥有当前资源的访问权限3、通过权限判断获取资源返回给前端登录认证流程图基于RBAC的授权控制RBAC概念Role-Based Access Control中文意思是基于角色Role的访问控制。这是一种广泛应用于计算机系统和网络安全领域的访问控制模型。简单来说就是通过将权限分配给角色再将角色分配给用户来实现对系统资源的访问控制。一个用户拥有若干角色每一个角色拥有若干权限。这样就构造成“用户-角色-权限”的授权模型。在这种模型中用户与角色之间角色与权限之间一般是多对多的关系模型在数据库中主要体现用户表、角色表、菜单表、用户角色关联表、角色菜单关联表五个模型CREATETABLEmySchema.t_user(idINTIDENTITY(1,1)NOTNULL,usernameVARCHAR(100)NOTNULL,passwordVARCHAR(100)NOTNULL,emailVARCHAR(100)NOTNULL,phoneVARCHAR(100),UNIQUE(id),UNIQUE(username),UNIQUE(email),UNIQUE(phone),NOTCLUSTERPRIMARYKEY(id))STORAGE(ONMAIN,CLUSTERBTR);COMMENTONTABLEmySchema.t_userIS用户表;COMMENTONCOLUMNmySchema.t_user.idIS用户id;COMMENTONCOLUMNmySchema.t_user.usernameIS用户名;COMMENTONCOLUMNmySchema.t_user.passwordIS密码;COMMENTONCOLUMNmySchema.t_user.emailIS用户邮箱;COMMENTONCOLUMNmySchema.t_user.phoneIS电话;CREATETABLEmySchema.sys_role(idBIGINTIDENTITY(1,1)NOTNULL,nameVARCHAR(128)DEFAULTNULL,role_keyVARCHAR(100)DEFAULTNULL,statusCHAR(1)DEFAULT0,del_flagINTDEFAULT0,create_byBIGINTDEFAULTNULL,create_timeDATETIME(6)DEFAULTNULL,update_byBIGINTDEFAULTNULL,update_timeDATETIME(6)DEFAULTNULL,remarkVARCHAR(500)DEFAULTNULL,NOTCLUSTERPRIMARYKEY(id))STORAGE(ONMAIN,CLUSTERBTR);COMMENTONTABLEmySchema.sys_roleIS角色表;COMMENTONCOLUMNmySchema.sys_role.idIS角色id;COMMENTONCOLUMNmySchema.sys_role.nameIS角色名称;COMMENTONCOLUMNmySchema.sys_role.role_keyIS角色权限字符串;COMMENTONCOLUMNmySchema.sys_role.statusIS角色状态(0正常, 1停用);COMMENTONCOLUMNmySchema.sys_role.del_flagIS删除标志(0未删除1已删除);COMMENTONCOLUMNmySchema.sys_role.remarkIS备注;CREATETABLEmySchema.sys_menu(idBIGINTIDENTITY(2,1)NOTNULL,menu_nameVARCHAR(64)DEFAULTNULLNOTNULL,pathVARCHAR(200)DEFAULTNULL,componentVARCHAR(50)DEFAULTNULL,visibleCHAR(1)DEFAULT0,statusCHAR(1)DEFAULT0,permsVARCHAR(100)DEFAULTNULL,iconVARCHAR(100)DEFAULT#,create_byBIGINTDEFAULTNULL,create_timeDATETIME(6)DEFAULTCURRENT_TIMESTAMP,update_byBIGINTDEFAULTNULL,update_timeDATETIME(6)DEFAULTCURRENT_TIMESTAMP,delete_f1agINTDEFAULT0,remarkVARCHAR(500)DEFAULTNULL,UNIQUE(id),NOTCLUSTERPRIMARYKEY(id))STORAGE(ONMAIN,CLUSTERBTR);COMMENTONTABLEmySchema.sys_menuIS菜单表;COMMENTONCOLUMNmySchema.sys_menu.menu_nameIS菜单名;COMMENTONCOLUMNmySchema.sys_menu.pathIS路由地址;COMMENTONCOLUMNmySchema.sys_menu.componentIS组件路径;COMMENTONCOLUMNmySchema.sys_menu.visibleIS菜单状态(0显示1隐藏);COMMENTONCOLUMNmySchema.sys_menu.statusIS菜单状态(0正常1停用);COMMENTONCOLUMNmySchema.sys_menu.permsIS权限标识;COMMENTONCOLUMNmySchema.sys_menu.iconIS菜单图标;COMMENTONCOLUMNmySchema.sys_menu.delete_f1agIS是否删除(0未删除1已删除);COMMENTONCOLUMNmySchema.sys_menu.remarkIS备注;CREATETABLEmySchema.sys_user_role(user_idBIGINTDEFAULT0NOTNULL,role_idBIGINTDEFAULT0NOTNULL,NOTCLUSTERPRIMARYKEY(user_id,role_id))STORAGE(ONMAIN,CLUSTERBTR);COMMENTONTABLEmySchema.sys_user_roleIS用户角色表;COMMENTONCOLUMNmySchema.sys_user_role.user_idIS用户id;COMMENTONCOLUMNmySchema.sys_user_role.role_idIS角色id;CREATETABLEmySchema.sys_role_menu(role_idBIGINTDEFAULT0NOTNULL,menu_idBIGINTDEFAULT0NOTNULL,NOTCLUSTERPRIMARYKEY(role_id,menu_id))STORAGE(ONMAIN,CLUSTERBTR);COMMENTONTABLEmySchema.sys_role_menuIS角色菜单关联表;COMMENTONCOLUMNmySchema.sys_role_menu.role_idIS角色id;COMMENTONCOLUMNmySchema.sys_role_menu.menu_idIS菜单id;权限流程用户表、角色表、菜单表、部门表、用户角色关联表、角色菜单关联表数据权限分为5种个人、全部、本部门、指定部门、本部门及以下链路1、用户注册指定部门创建角色给角色赋菜单权限、数据权限给用户赋予角色2、用户登录通过用户的所有角色获取所有的菜单权限和最大数据权限菜单数据直接展示在页面所有数据都有创建人则数据的部门id是创建人的部门id3、在访问数据接口时通过mybatis的拦截器对用户的数据进行过滤(拼接sql)返回给前端captcha图片验证码实现思路1、图片验证码获取并将验证码验证码存放起来(单机应用可放在session中分布式应用放在redis中)2、当用户登录时携带验证码以及验证码的key进入到后端从redis中获取值进行验证!--谷歌kaptcha验证码依赖--dependencygroupIdcom.github.penggle/groupIdartifactIdkaptcha/artifactIdversion2.3.2/version/dependency代码思路1、生成验证码publicResultCaptchaVOgetCaptcha()throwsIOException{// 生成文字验证码StringcontentdefaultKaptcha.createText();// 生成图片验证码ByteArrayOutputStreamoutputStreamnull;BufferedImageimagedefaultKaptcha.createImage(content);outputStreamnewByteArrayOutputStream();ImageIO.write(image,jpg,outputStream);// 对字节数组Base64编码Stringstrdata:image/jpeg;base64,;Stringbase64ImgstrBase64.getEncoder().encodeToString(outputStream.toByteArray()).replace(\n,).replace(\r,);CaptchaVOcaptchaVOcaptchaService.cacheCaptcha(content);captchaVO.setBase64Img(base64Img);returnResult.success(captchaVO);}2、存储验证码ServicepublicclassCaptchaService{privateLongtimeout300L;AutowiredprivateRedisUtilsredisUtils;privatefinalStringCAPTCHA_KEY_PREFIXcaptcha:verification:;publicCaptchaVOcacheCaptcha(Stringcaptcha){//生成一个随机标识符StringrandomStrUUID.randomUUID().toString();//缓存验证码并设置过期时间StringcaptchaKeyCAPTCHA_KEY_PREFIX.concat(randomStr);redisUtils.set(captchaKey,captcha,timeout,TimeUnit.SECONDS);CaptchaVOcaptchaVOnewCaptchaVO();captchaVO.setCaptchaKey(captchaKey);captchaVO.setExpire(timeout);captchaVO.setCaptcha(captcha);returncaptchaVO;}}3、校验验证码ObjectcaptcharedisUtils.get(reqVO.getCaptchaKey());if(Objects.isNull(captcha)){return验证码已过期;}if(!captcha.equals(reqVO.getCaptcha())){return验证码错误;}chaVO;}}3、校验验证码 java Object captcha redisUtils.get(reqVO.getCaptchaKey()); if (Objects.isNull(captcha)) { return 验证码已过期; } if (!captcha.equals(reqVO.getCaptcha())) { return 验证码错误; }

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号