当前位置: 首页 > news >正文

邢台市网站建设_网站建设公司_字体设计_seo优化

长春绿园网站建设,网站开发的可行性分析,设计素材网站免费的,杭州网站优化流程文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截#xff1f;2. 如何拦截角色注解#xff1f;3. 角色如何读取?4. 最后做角色校验 三、应用#xff1a;给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API#xf… 文章目录 前言一、定义注解annotation二、拦截角色注解1. 在拦截器哪里拦截2. 如何拦截角色注解3. 角色如何读取?4. 最后做角色校验 三、应用给管理员操作接口加注解四、PostMan测试最后 前言 在【7.1】管理员图书录入和修改API当时预告过并没有写【校验是否是管理员】的逻辑因为是通用逻辑会单写一篇来细讲那么今天就来安排 角色权限校验是保证接口安全必备的能力有权限才可以操作所以一般对于这种通用逻辑推荐不与主业务逻辑耦合那么怎么来解耦 在SpringBoot中过滤器、拦截器、切面都可以实现统一角色校验的功能解耦为了和【3-3 】用户身份认证的拦截器方案保持一致我们采用SpringBoot拦截器Interceptor实战统一角色权限校验 使用AOP的话你会实现吗文末投票不实名让我们有更多的互动吧~~ 一、定义注解annotation 通用功能定义在tg-book-common中 我们最终实现的效果是加了Role注解以后这个接口只有管理员才能访问学生访问接口就会报错无权限 下面定义一个角色注解通过Target 指定作用于方法上。 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface Role {/*** 角色id数组默认1-管理员**/int[] roleIds() default { 1 }; }定义roleIds是保留扩展性。若后面扩展出【校长】等其它角色我们可以通过int数组来任意组合角色只要拥有int数组中的任意角色id即可访问该接口。 二、拦截角色注解 1. 在拦截器哪里拦截 显然首先需要【用户身份认证】通过然后再校验角色即在AuthInterceptor的preHandle的保存至授权上下文之前AuthContextInfo.setAuthInfo(authInfo); Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {。。。省略一大堆用户身份认证代码。。。// TODO 校验角色写在这// 校验成功, 保存至认证上下文AuthContextInfo.setAuthInfo(authInfo);return true; }2. 如何拦截角色注解 可以通过将handler转成HandlerMethod以后通过getAnnotation来获取 HandlerMethod handlerMethod (HandlerMethod) handler; Role role handlerMethod.getMethod().getAnnotation(Role.class); if (role ! null) {// 走到这说明方法上加了Role}3. 角色如何读取? 前2步以后我们就拿到了当前登录的userId也拿到了接口要求的roleIds数组所以至少有两种方案 可以通过userId去查一次MySQL然后判断一下角色这种我就不实现了你可以自己去查询实现将roleId保存在token中本文实现的是另一种方案是为了扩展一下大家的思路也就是不走MySQL查询的方案。 AuthContextInfo类中增加字段来承载角色 private Integer roleId;loginByPassword中将role设置到authContextInfo.roleId authContextInfo.setRoleId(user.getRole());接着在JwtTokenProvider中定义payload的自定义字段r // payload的自定义字段r private static final String CLAIM_ROLE r;在JwtTokenProvider.create中将它保存到token的payload中 // 自定义 role .withClaim(CLAIM_ROLE, authContextInfo.getRoleId())在JwtTokenProvider.verify中将它从token中解析出来 4. 最后做角色校验 拿到了authInfo.getRoleId()还知道了接口方法要求的roleIds判断逻辑太简单了吧~ 我简单写了一下如下 // 校验角色 HandlerMethod handlerMethod (HandlerMethod) handler; Role role handlerMethod.getMethod().getAnnotation(Role.class); if (role ! null) {// 走到这说明方法上加了Roleboolean isAdmin false;for (int roleId : role.roleIds()) {if (authInfo.getRoleId().equals(roleId)) {isAdmin true;break;}}if (!isAdmin) {log.info([403]无权限, token{}, token);response.setStatus(HttpServletResponse.SC_FORBIDDEN);// 别忘了返回falsereturn false;} }三、应用给管理员操作接口加注解 在实现了通用校验逻辑以后接下来就是如何应用了 其实就是加Role注解 下面对管理员录入和修改图书接口加了注解其它接口同理~~ 四、PostMan测试 使用role0的账号调用管理员API返回403 使用管理员账号则会正常执行就不做截图了另外别忘了提交Git 最后 想要看更多实战好文章还是给大家推荐我的实战专栏–《基于SpringBootSpringCloudVue前后端分离项目实战》由我和 前端狗哥 合力打造的一款专栏可以让你从0到1快速拥有企业级规范的项目实战经验 具体的优势、规划、技术选型都可以在《开篇》试读 订阅专栏后可以添加我的微信我会为每一位用户进行针对性指导 另外别忘了关注我天罡gg 发布新文不容易错过 https://blog.csdn.net/scm_2008
http://www.lebaoying.cn/news/79223.html

相关文章:

  • 邢台做网站推广wordpress 插件漏洞扫描
  • 涟水县住房和城乡建设局网站wordpress去除目录
  • 网站构架图怎么做施工企业资质包括哪些
  • a963室内设计网学seo的培训学校
  • 淘宝客网站建设视频wordpress恢复阿里云
  • 秦皇岛建设局局官方网站wordpress去除底部
  • 保险资料网站有哪些上海建行网点
  • 如何使用微信公众号做网站wordpress函数
  • 企业内部网站建设网站抖音代运营收费标准参考
  • 北京网站建设有哪些网站后台导航随意添加
  • 如何修改公司网站天津百度搜索排名优化
  • 敦煌壁画网站开发毕设论文网站漂浮广告怎么做
  • 阿里云网站中文手机上能不能制作网站开发
  • 网站制作公司要文化建设费个人怎么做网站
  • 做网站商丘回收网站建设
  • 网站建设银行转账做网站 做应用
  • 学做美食的视频网站有哪些seo基础入门免费教程
  • 网站建设平台一般多少钱如何宣传推广产品
  • 游戏网站开发名字WordPress数据库搬迁
  • 网站建设的简历广告设计是做什么
  • 手机建设网站目的seo发布专员招聘
  • 哪里可以做网站系统怎么更换wordpress服务器
  • 网站建设平台docker可以做网站吗
  • 网站基础建设一般多少钱做网站总结体会
  • aspsql server典型网站建设案例 源码想做电商带货怎么入手
  • 用ps做一份网站怎么做韩剧网站的翻译
  • 合肥网站建设司图东莞市做网站
  • 局域网网站怎么做阳江人才招聘网官网
  • 关于推广网站的标题移动互联网开发技术电子书
  • 电子商务网站制作步骤深圳搬家公司哪家好