国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

018-從零搭建微服務(wù)-系統(tǒng)服務(wù)(五)

這篇具有很好參考價值的文章主要介紹了018-從零搭建微服務(wù)-系統(tǒng)服務(wù)(五)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

寫在最前

如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。

源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning

源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui

文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis

前情回顧

之前我們設(shè)計了權(quán)限模型并提交了數(shù)據(jù)庫腳本,然后通過 mingyue-common-gen 模塊 MingYueCommonGenDemo 生成了基礎(chǔ)代碼,接下來我們需要提供兩個關(guān)鍵接口:

  1. 獲取用戶權(quán)限信息;
  2. 獲取用戶路由信息;

TIPS

為了嚴(yán)格按照 RESTful 接口風(fēng)格設(shè)計,變更現(xiàn)有接口命名: getSysUserInfoByUsername => userInfogetSysUsers => list,后續(xù)接口也將嚴(yán)格按照 RESTful 接口風(fēng)格設(shè)計。

登錄緩存用戶信息

Session 會話

Session 是會話中專業(yè)的數(shù)據(jù)緩存組件,通過 Session 我們可以很方便的緩存一些高頻讀寫數(shù)據(jù),提高程序性能,例如:

// 在登錄時緩存 user 對象 
StpUtil.getSession().set("user", user);

// 然后我們就可以在任意處使用這個 user 對象
SysUser user = (SysUser) StpUtil.getSession().get("user");

在 Sa-Token 中,Session 分為三種,分別是:

  • Account-Session: 指的是框架為每個賬號 id 分配的 Session
  • Token-Session: 指的是框架為每個 token 分配的 Session
  • Custom-Session: 指的是以一個特定的值作為 SessionId,來分配的 Session

Token-Session

緩存用戶信息

public static void login(SysUser userInfo) {
  // 請求作用域:存儲的數(shù)據(jù)只在一次請求內(nèi)有效,請求結(jié)束后數(shù)據(jù)自動清除。
  SaStorage storage = SaHolder.getStorage();
  storage.set(LOGIN_USER_KEY, userInfo);
  storage.set(USER_KEY, userInfo.getUserId());

  // 第1步,先登錄上
  StpUtil.login(userInfo.getUserId());
  // 第3步,緩存用戶信息
  StpUtil.getTokenSession().set(LOGIN_USER_KEY, userInfo);
}

獲取用戶信息

public static SysUser getLoginUser() {
  SysUser loginUser = (SysUser) SaHolder.getStorage().get(LOGIN_USER_KEY);
  if (loginUser != null) {
    return loginUser;
  }
  
  loginUser = (SysUser) StpUtil.getTokenSession().get(LOGIN_USER_KEY);
  SaHolder.getStorage().set(LOGIN_USER_KEY, loginUser);
  return loginUser;
}

接口測試

@GetMapping("info")
@Operation(summary = "獲取當(dāng)前用戶全部信息")
public R<SysUser> userInfo() {
  SysUser sysUser = LoginHelper.getLoginUser();
  System.out.println("=============================");
  System.out.println(JSONUtil.toJsonStr(sysUser));
  System.out.println("=============================");
  return R.ok(null);
}

接口調(diào)用打印如下:

=============================
{"userId":1,"username":"mingyue","nickname":"明月","sex":"0","password":"123456","phone":"13288888888","status":"0","isDeleted":"0","createTime":1689757582000,"updateTime":1689757585000,"createBy":"mingyue","updateBy":"mingyue"}
=============================

獲取用戶權(quán)限信息

接口層

@GetMapping("info")
@Operation(summary = "獲取當(dāng)前登錄用戶全部信息")
public R<UserInfoVo> userInfo() {
   return R.ok(sysUserService.getUserInfo());
}

業(yè)務(wù)層

@Override
public UserInfoVo getUserInfo() {
   UserInfoVo result = new UserInfoVo();

   SysUser sysUser = LoginHelper.getLoginUser();
   // 密碼置空
   sysUser.setPassword(null);
   result.setSysUser(sysUser);

   // 設(shè)置角色列表
   Set<String> rolePermission = sysRoleService.getRolePermission(sysUser.getUserId());
   result.setRoles(rolePermission);

   // 設(shè)置權(quán)限列表
   Set<String> menuPermission = sysMenuService.getMenuPermission(sysUser.getUserId());
   result.setRoles(menuPermission);

   return result;
}

測試接口

Authorization Token 通過登錄接口獲取

curl -X 'GET' \
'http://mingyue-gateway:9100/system/sysUser/info' \
-H 'accept: */*' \
-H 'Authorization: vXPJnADIcTPfKuP3reBYmmUAi4xjw8nf'

接口返回

{
  "code": 200,
  "msg": "操作成功",
  "data": {
    "sysUser": {
      "userId": 1,
      "username": "mingyue",
      "nickname": "明月",
      "sex": "0",
      "password": null,
      "phone": "13288888888",
      "email": null,
      "avatar": null,
      "status": "0",
      "isDeleted": "0",
      "createTime": "2023-07-19T17:06:22",
      "updateTime": "2023-07-19T17:06:25",
      "createBy": "mingyue",
      "updateBy": "mingyue"
    },
    "permissions": null,
    "roles": [
      null,
      "system:user:list"
    ]
  }
}

獲取用戶路由信息

接口層

@GetMapping("getRouters")
@Operation(summary = "獲取路由信息")
public R<List<RouterVo>> getRouters() {
  Long userId = LoginHelper.getLoginUser().getUserId();
  return R.ok(sysMenuService.getRouters(userId));
}

業(yè)務(wù)層

@Override
public List<RouterVo> getRouters(Long userId) {
  List<SysMenu> sysMenus = sysMenuMapper.selectMenuTreeByUserId(userId);

  return this.recursionMenu(sysMenus, -1L);
}

/**
	* 遞歸菜單,構(gòu)建菜單樹
	*/
private List<RouterVo> recursionMenu(List<SysMenu> sysMenus, Long pid) {
  List<RouterVo> tree = CollUtil.newArrayList();

  for (SysMenu menu : sysMenus) {
    if (menu.getParentId().equals(pid)) {
      RouterVo router = new RouterVo();
      router.setPath("/" + menu.getPath());
      router.setName(menu.getPath());
      router.setComponent(menu.getComponent());
      router.setRedirect(menu.getRedirect());

      MetaVo metaVo = new MetaVo();
      metaVo.setTitle(menu.getMenuName());
      metaVo.setIsLink(menu.getIsLink());
      metaVo.setIsHide(UserConstants.IS_HIDE.equals(menu.getIsHide()));
      metaVo.setIsKeepAlive(UserConstants.IS_KEEP_ALIVE.equals(menu.getIsKeepAlive()));
      metaVo.setIsAffix(UserConstants.IS_AFFIX.equals(menu.getIsAffix()));
      metaVo.setIsIframe(UserConstants.IS_IFRAME.equals(menu.getIsIframe()));
      metaVo.setIcon(menu.getIcon());
      router.setMeta(metaVo);

      router.setChildren(recursionMenu(sysMenus, menu.getMenuId()));

      tree.add(router);
    }
  }

  return tree;
}

測試接口

curl -X 'GET' \
'http://mingyue-gateway:9100/system/sysMenu/getRouters' \
-H 'accept: */*'
-H 'Authorization: vXPJnADIcTPfKuP3reBYmmUAi4xjw8nf'

接口返回

{
  "code": 200,
  "msg": "操作成功",
  "data": [
    {
      "path": "/system",
      "name": "system",
      "component": null,
      "redirect": null,
      "meta": {
        "title": "系統(tǒng)管理",
        "isLink": "0",
        "isHide": false,
        "isKeepAlive": false,
        "isAffix": false,
        "isIframe": false,
        "icon": "iconfont icon-xitongshezhi"
      },
      "children": [
        {
          "path": "/user",
          "name": "user",
          "component": "/system/user",
          "redirect": null,
          "meta": {
            "title": "用戶管理",
            "isLink": "0",
            "isHide": false,
            "isKeepAlive": false,
            "isAffix": false,
            "isIframe": false,
            "icon": "iconfont icon-icon-"
          },
          "children": []
        },
        ...
      ]
    }
  ]
}

小結(jié)

現(xiàn)在用戶已經(jīng)拿到權(quán)限點了,接下來整合一下權(quán)限點與 Sa-Token 的使用,看看 Sa-Token 如何通過權(quán)限點控制接口訪問。文章來源地址http://www.zghlxwxcb.cn/news/detail-622133.html

到了這里,關(guān)于018-從零搭建微服務(wù)-系統(tǒng)服務(wù)(五)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • 024-從零搭建微服務(wù)-系統(tǒng)服務(wù)(六)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis mingyue-ui 目前與后端交

    2024年02月09日
    瀏覽(24)
  • 從零開始:如何使用Docker構(gòu)建微服務(wù)架構(gòu)

    使用 Docker 構(gòu)建微服務(wù)架構(gòu)是一種流行的方法,因為 Docker 提供了輕量級的容器化技術(shù),使得每個微服務(wù)可以在隔離的環(huán)境中獨立運行。從零開始構(gòu)建這樣的架構(gòu)涉及到多個步驟,包括理解微服務(wù)架構(gòu)的基本概念、安裝 Docker、創(chuàng)建 Docker 容器和鏡像、配置網(wǎng)絡(luò),以及部署和管理

    2024年04月14日
    瀏覽(28)
  • 深入探索JavaEE單體架構(gòu)、微服務(wù)架構(gòu)與云原生架構(gòu)

    鏈接: https://pan.baidu.com/s/1xSI1ofwYXfqOchfwszCZnA?pwd=4s99 提取碼: 4s99 復(fù)制這段內(nèi)容后打開百度網(wǎng)盤手機App,操作更方便哦 --來自百度網(wǎng)盤超級會員v4的分享 ??【00】模塊零:開營直播:精彩直播課程帶你全面了解最新技術(shù)動態(tài),為學(xué)習(xí)之旅打下良好基礎(chǔ)!???? ??【01】模塊一:

    2024年02月12日
    瀏覽(20)
  • 微服務(wù)架構(gòu)2.0--云原生時代

    微服務(wù)架構(gòu)2.0--云原生時代

    云原生(Cloud Native)是一種關(guān)注于在云環(huán)境中構(gòu)建、部署和管理應(yīng)用程序的方法和理念。云原生應(yīng)用能夠最大程度地利用 云計算基礎(chǔ)設(shè)施的優(yōu)勢,如彈性、自動化、可伸縮性和高可用性 。這個概念涵蓋了許多方面,包括 架構(gòu)、開發(fā)、部署、運維 和團隊文化等 容器化: 將應(yīng)

    2024年02月11日
    瀏覽(23)
  • 淺析云原生時代的服務(wù)架構(gòu)演進

    摘要: 相比于傳統(tǒng)的微服務(wù)架構(gòu),云原生和 serverless 技術(shù)更加靈活、高效,能夠更好地滿足用戶的需求。 本文分享自華為云社區(qū)《《鳳凰架構(gòu)》學(xué)習(xí)和思考——云原生時代的服務(wù)架構(gòu)演進史》,作者:breakDawn。 隨著云原生的概念越來越火,服務(wù)的架構(gòu)應(yīng)該如何發(fā)展和演進,

    2023年04月10日
    瀏覽(23)
  • 028-從零搭建微服務(wù)-搜索服務(wù)(二)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 更多用法可以參考 E

    2024年02月07日
    瀏覽(15)
  • 023-從零搭建微服務(wù)-推送服務(wù)(三)

    023-從零搭建微服務(wù)-推送服務(wù)(三)

    原【短信服務(wù)】更名【推送服務(wù)】 如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springc

    2024年02月10日
    瀏覽(20)
  • 027-從零搭建微服務(wù)-搜索服務(wù)(一)

    027-從零搭建微服務(wù)-搜索服務(wù)(一)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis Docker 安裝 ELK 7.17.2 h

    2024年02月07日
    瀏覽(13)
  • 022-從零搭建微服務(wù)-短信服務(wù)(二)

    022-從零搭建微服務(wù)-短信服務(wù)(二)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 需要注冊一個阿里云賬

    2024年02月11日
    瀏覽(11)
  • 021-從零搭建微服務(wù)-短信服務(wù)(一)

    021-從零搭建微服務(wù)-短信服務(wù)(一)

    如果這個項目讓你有所收獲,記得 Star 關(guān)注哦,這對我是非常不錯的鼓勵與支持。 源碼地址(后端):https://gitee.com/csps/mingyue-springcloud-learning 源碼地址(前端):https://gitee.com/csps/mingyue-springcloud-ui 文檔地址:https://gitee.com/csps/mingyue-springcloud-learning/wikis 短信服務(wù)(Short Messa

    2024年02月11日
    瀏覽(46)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包