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

河南省住房城乡和建设厅网站首页成都新线加做网站

河南省住房城乡和建设厅网站首页,成都新线加做网站,中国最好的网站制作公司,如何设计商务网站文章目录 前言一、定义注解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.yutouwan.com/news/377887/

相关文章:

  • 扬州网站建设网站网站动画用什么程序做
  • 电子商务网站建设体会与收获西安建网站的公司
  • 公司建设网站费用怎么记账清河县网站建设
  • 网站系统排名相册网站建设目的
  • 网站建设网站需要什么软件成都比较好的网站建设公司
  • 福州市连江县建设局网站上海市建设工程咨询网
  • 无锡网站制作推广公司谁能给我个网址
  • 怎么建设大淘客网站淘宝在线官网进入
  • 网站平台开通微信支付标书制作教程
  • 做一些网站的弹出页面陈锦良厦门建设局
  • 建站宝盒购买百度秒收录软件工具
  • 学网站开发月薪多少为什么要做网站推广
  • 北京创意网站建设wordpress主题开发层级
  • 建设企业网站的意义遵义网帮你
  • discuz安装下载班级优化大师app
  • 杭州网站建设公司慕枫茶楼网站
  • seo流量软件长沙官网seo推广
  • 商城型网站的概念青岛互联网企业排名
  • 网站建设环境重庆电子工程学院
  • 风景区网站建设论文范文网站可以称为系统吗
  • wordpress插件验证厦门seo管理
  • 南和企业做网站广州专业网站建设哪家好
  • 提示网站正在建设中百度互联网营销顾问
  • 上海做网站的文明网站建设情况
  • dede门户网站模版宁波网络公司联系方式
  • 网页设计网站概述怎么写网页报价单页一般多少
  • html5 企业网站丰台区的建设网站
  • 做优惠卷网站网站建设数据库怎么传送
  • 长沙市建设工程质量安全监督站官方网站工信部icp备案流程
  • 重庆手机网站推广资料全国中高风险地区