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

ruoyi cloud集成casdoor

這篇具有很好參考價(jià)值的文章主要介紹了ruoyi cloud集成casdoor。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

????????之前寫過一篇關(guān)于ruoyi cloud集成cas的但是使用的apereo的單點(diǎn)登錄,該應(yīng)用的文檔都是英文文檔,嘗試一下集成casdoor,其官方文檔比較詳細(xì)。

考慮到有些小伙伴上git不方便,需要用到的代碼和Windows工具,都在這了? ? ? ??

1、環(huán)境搭建

  • Go 1.6+
  • Node.js LTS (16或14)?這里我使用的是14.19.0,因?yàn)轫?xiàng)目使用的這個(gè)
  • git

? ? 我沿用了之前的服務(wù)器,所以在官網(wǎng)下載Go 1.9的windows安裝包

? ? 下載msi,傻瓜式安裝,cmd輸入go version,出現(xiàn)版本號(hào),收工

? ? ?后兩項(xiàng)就不寫了,網(wǎng)上太多

2、casdoor部署

創(chuàng)建文件夾,右鍵git bash

?git clone https://github.com/casdoor/casdoor.git

下載完成代碼后,進(jìn)入casdoor-master文件夾,修改conf,修改app.conf文件,datasourcename:數(shù)據(jù)庫的用戶名,密碼,地址,dbName:數(shù)據(jù)庫名

appname = casdoor
httpport = 8000
runmode = dev
SessionOn = true
copyrequestbody = true
driverName = mysql
dataSourceName = root:123456@tcp(localhost:3306)/
dbName = casdoor
tableNamePrefix =
showSql = false
redisEndpoint =
defaultStorageProvider =
isCloudIntranet = false
authState = "casdoor"
socks5Proxy = "127.0.0.1:10808"
verificationCodeTimeout = 10
initScore = 2000
logPostOnly = true
origin = "https://door.casdoor.com"
staticBaseUrl = "https://cdn.casbin.org"

進(jìn)入cmd,切換國(guó)內(nèi)代理

go env -w GOPROXY=https://goproxy.cn

使用命令運(yùn)行后端

go run main.go

進(jìn)入web文件夾,cmd,下載yarn

npm install --global yarn

驗(yàn)證yarn是否安裝完成

yarn --version

安裝前端依賴

yarn install

前端運(yùn)行

yarn start

3配置casdoor

1、新建組織,將密碼類型呢改成bcrypt,并開啟軟刪除

2、新建同步器,配置數(shù)據(jù)庫密碼,修改表列?

ruoyi cloud集成casdoor

3、保存和同步,查看若依的用戶是否存在

4、新建應(yīng)用和證書,在新建的應(yīng)用中,選擇新創(chuàng)建的證書,在重定向urls內(nèi)添加

http://localhost:81/login

4修改若依前端

1、安裝vue-sdk

npm i casdoor-vue-sdk --save

2、執(zhí)行指令

npx vue-demi-fix

3、修改main.js


//新增
import Casdoor from 'casdoor-vue-sdk'
import VueCompositionAPI from '@vue/composition-api'
const config = {
  serverUrl: "你的casdoor路徑",
  clientId: "客戶端id",
  organizationName: "組織名稱",
  appName: "應(yīng)用名稱",
  redirectPath: "/login(重定向回來的路徑)",
};
Vue.use(VueCompositionAPI)
Vue.use(Casdoor,config)

//修改
new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
}).$mount('#app')

4、修改login.vue(直接替換)

<template>
  <div class="login">
    <el-form ref="loginForm"  class="login-form">
      <h3 class="title">若依后臺(tái)管理系統(tǒng)</h3>

    </el-form>
    <!--  底部  -->
    <div class="el-login-footer">
      <span>Copyright ? 2018-2022 ruoyi.vip All Rights Reserved.</span>
    </div>
  </div>
</template>

<script>
import { getCodeImg } from "@/api/login";
import Cookies from "js-cookie";
import { encrypt, decrypt } from '@/utils/jsencrypt'

export default {
  name: "Login",
  data() {
    return {
      codeUrl: "",
      loginForm: {
        code: "",
        state: ""
      },

      loading: false,
      // 驗(yàn)證碼開關(guān)
      captchaEnabled: false,
      // 注冊(cè)開關(guān)
      register: true,
      redirect: undefined
    };
  },
  watch: {
    $route: {
      handler: function(route) {
        this.redirect = route.query && route.query.redirect;
      },
      immediate: true
    }
  },
  created() {
    /*this.getCode();
    this.getCookie();*/

      let url = window.document.location.href//get url
      let u = new URL(url);
      this.loginForm.code = u.searchParams.get('code')//get code and state
      this.loginForm.state = u.searchParams.get('state')
      if(this.loginForm.code!=null&&this.loginForm.state!=null){//if code and state is null, execute handleLogin
        this.handleLogin()
      }else{
        window.location.href = this.getSigninUrl();
      }

  },
  methods: {
    handleLogin() {
      console.log("進(jìn)入handleLogin",this.loginForm);
      this.$store.dispatch("Login",this.loginForm).then(()=>{
        this.$router.push({path:this.redirect || "/"}).catch(()=>{});
      }).catch(()=>{
        this.loading = false;
      })
    }
  }
};
</script>

<style rel="stylesheet/scss" lang="scss">
.login {
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100%;
  background-image: url("../assets/images/login-background.jpg");
  background-size: cover;
}
.title {
  margin: 0px auto 30px auto;
  text-align: center;
  color: #707070;
}

.login-form {
  border-radius: 6px;
  background: #ffffff;
  width: 400px;
  padding: 25px 25px 5px 25px;
  .el-input {
    height: 38px;
    input {
      height: 38px;
    }
  }
  .input-icon {
    height: 39px;
    width: 14px;
    margin-left: 2px;
  }
}
.login-tip {
  font-size: 13px;
  text-align: center;
  color: #bfbfbf;
}
.login-code {
  width: 33%;
  height: 38px;
  float: right;
  img {
    cursor: pointer;
    vertical-align: middle;
  }
}
.el-login-footer {
  height: 40px;
  line-height: 40px;
  position: fixed;
  bottom: 0;
  width: 100%;
  text-align: center;
  color: #fff;
  font-family: Arial;
  font-size: 12px;
  letter-spacing: 1px;
}
.login-code-img {
  height: 38px;
}
</style>

5、修改user.js的login方法

Login({ commit }, userInfo) {
      const code = userInfo.code
      const state = userInfo.state
      return new Promise((resolve, reject) => {
        login(code, state).then(res => {
          let data = res.data
          setToken(data.access_token)
          commit('SET_TOKEN', data.access_token)
          setExpiresIn(data.expires_in)
          commit('SET_EXPIRES_IN', data.expires_in)
          resolve()
        }).catch(error => {
          reject(error)
        })
      })
    },

6、修改api下面的login.js

export function login(code,state) {
  return request({
    url: '/auth/login',
    headers: {
      isToken: false
    },
    method: 'post',
    data: { code,state }
  })
}

可以嘗試運(yùn)行,是否會(huì)跳轉(zhuǎn),是否能返回code和state

5、修改若依后端

1、導(dǎo)入依賴

<dependency>
            <groupId>org.casbin</groupId>
            <artifactId>casdoor-spring-boot-starter</artifactId>
            <version>1.2.0</version>
</dependency>

2、新建實(shí)體CodeBody

package com.ruoyi.auth.form;


public class CodeBody {
    private String code;
    private String state;

    public String getCode() {
        return code;
    }

    public void setCode(String code) {
        this.code = code;
    }

    public String getState() {
        return state;
    }

    public void setState(String state) {
        this.state = state;
    }

    @Override
    public String toString() {
        return "CodeBody{" +
                "code='" + code + '\'' +
                ", state='" + state + '\'' +
                '}';
    }
}

3、修改tokenController,login方法

    @PostMapping("login")
    public R<?> callback(@RequestBody CodeBody code) {//we should define a CodeBody entity which have code and state
        String token = casdoorAuthService.getOAuthToken(code.getCode(), code.getState());
        CasdoorUser casdoorUser = casdoorAuthService.parseJwtToken(token);
        if(casdoorUser.getName()!=null){
            String casdoorUserName = casdoorUser.getName();
            if(sysLoginService.getUserByCasdoorName(casdoorUserName)==null){//if database haven't this user
                // add this user into database
                sysLoginService.casdoorRegister(casdoorUserName);
            }
        }
        LoginUser userInfo = sysLoginService.casdoorLogin(casdoorUser.getName());//get this user's information by database
        return R.ok(tokenService.createToken(userInfo));
    }

4、sysloginService新增三個(gè)方法

public LoginUser casdoorLogin(String username){
        // execute user
        R<LoginUser> userResult = remoteUserService.getUserInfo(username, SecurityConstants.INNER);
        if (R.FAIL == userResult.getCode())
        {
            throw new ServiceException(userResult.getMsg());
        }

        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "this user is not exist");
            throw new ServiceException("user:" + username + " is not exist");
        }
        LoginUser userInfo = userResult.getData();
        SysUser user = userResult.getData().getSysUser();
        if (UserStatus.DELETED.getCode().equals(user.getDelFlag()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "sorry, your account was deleted");
            throw new ServiceException("sorry, your account:" + username + " was deleted");
        }
        if (UserStatus.DISABLE.getCode().equals(user.getStatus()))
        {
            recordLogService.recordLogininfor(username, Constants.LOGIN_FAIL, "your account is disabled, you can contact admin ");
            throw new ServiceException("sorry, your account:" + username + " is disabled");
        }
        recordLogService.recordLogininfor(username, Constants.LOGIN_SUCCESS, "login successfully");
        return userInfo;
    }
    public String getUserByCasdoorName(String casdoorUsername){
        R<LoginUser> userResult = remoteUserService.getUserInfo(casdoorUsername, SecurityConstants.INNER);
        if (StringUtils.isNull(userResult) || StringUtils.isNull(userResult.getData()))
        {
            //if this user is not in RuoYi-Cloud database and casdoor have this user, we should create this user in database
            return null;
        }
        String username = userResult.getData().getSysUser().getUserName();
        return username;
    }
    public void casdoorRegister(String username){
        if (StringUtils.isAnyBlank(username))
        {
            throw new ServiceException("User must fill in");
        }
        SysUser sysUser = new SysUser();
        sysUser.setUserName(username);
        sysUser.setNickName(username);
        R<?> registerResult = remoteUserService.registerUserInfo(sysUser, SecurityConstants.INNER);
        System.out.println(registerResult);
        if (R.FAIL == registerResult.getCode())
        {
            throw new ServiceException(registerResult.getMsg());
        }
        recordLogService.recordLogininfor(username, Constants.REGISTER, "register successfully");
    }

5、bootstrap.yml內(nèi)新增casdoor配置文章來源地址http://www.zghlxwxcb.cn/news/detail-464724.html

server: 
  port: 36000
casdoor:
  endpoint: casdoor地址
  client-id: 客戶端id
  client-secret: 客戶端密鑰
  certificate: 證書名稱
  jwtPublicKey: 證書公鑰,注意拷下來的公鑰,每一行結(jié)尾加\n\,如"-----BEGIN CERTIFICATE-----\n\
  MIIE2TCCAsGgAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMCYxDjAMBgNVBAoTBWFk\n\
 .
 .
 .
  teANTdYzr6IIZiweG1/vvAXIk4HfjyVtOvxYAa6tfe0hpXDhCcqsO2ekpm0H\n\
  -----END CERTIFICATE-----"
  organization-name: 組織名稱
  application-name: 應(yīng)用名稱

到了這里,關(guān)于ruoyi cloud集成casdoor的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • ruoyi-cloud微服務(wù)新建子模塊

    ruoyi-cloud微服務(wù)新建子模塊

    相關(guān)文章 官方文檔 1、復(fù)制system模塊 直接復(fù)制 modules下面已有的system模塊,改名為 test 2、在modules下的 pom.xml文件中添加子模塊 test 這里要注意添加的位置是在 modules下的 pom.xml,也就是 test的父模塊的 3、進(jìn)入 test模塊修改 pom.xml 把原有的system 修改成test,把 modules-system修改成

    2024年02月13日
    瀏覽(19)
  • ruoyi-cloud—若依微服務(wù)打包部署

    ruoyi-cloud—若依微服務(wù)打包部署

    1. 前端端口修改 2.?后端端口修改 (1)修改ruoyi-gateway服務(wù)中的bootstrap.yml的port端口 ?(2)修改ruoyi-ui中的vue.confing.js的target中的端口 3. 后端部署 (1) 在本地電腦上代碼界面上打包后端 在 ruoyi 項(xiàng)目的 bin 目錄下執(zhí)行 package.bat 打包Web工程,生成jar包文件。不同模塊版本會(huì)生成在

    2024年01月21日
    瀏覽(21)
  • RuoYi-Cloud-Plus 登錄過程源碼

    RuoYi-Cloud-Plus 登錄過程源碼

    登錄界面 ruoyi-ui/src/views/login.vue 點(diǎn)擊登錄按鈕進(jìn)入handleLogin方法 loginForm actions中的Login方法 后端登錄 src/main/java/com/ruoyi/auth/controller/TokenController.java src/main/java/com/ruoyi/auth/service/SysLoginService.java 遠(yuǎn)程調(diào)用src/main/java/com/ruoyi/system/api/RemoteUserService.java 登錄類型src/main/java/com/ruoyi/com

    2024年02月03日
    瀏覽(13)
  • 若依微服務(wù)版啟動(dòng)(RuoYi-Cloud)教程

    若依微服務(wù)版啟動(dòng)(RuoYi-Cloud)教程

    之前一直有小伙伴咨詢?nèi)粢牢⒎?wù)版如何在本地啟動(dòng),今天簡(jiǎn)單的給大家介紹一下。 首先,學(xué)習(xí)Java的小伙伴應(yīng)該對(duì)若依框架都應(yīng)該有所了解,RuoYi-Cloud 是一個(gè) Java EE 分布式 微服務(wù)架構(gòu)平臺(tái),基于經(jīng)典技術(shù)組合(Spring Boot、Spring Cloud Alibaba、Vue、Element),內(nèi)置模塊如:部門管

    2024年01月18日
    瀏覽(25)
  • 若依cloud(RuoYi-Cloud)新增業(yè)務(wù)模塊和功能模塊增刪改查演示

    若依cloud(RuoYi-Cloud)新增業(yè)務(wù)模塊和功能模塊增刪改查演示

    前言 看了幾篇文章感覺都不太滿意,索性自己來寫一篇。 一、后端 后端新建業(yè)務(wù)模塊流程大致如下: 看一下目錄結(jié)構(gòu), business 就是我們自己的業(yè)務(wù)模塊: 1.0 新建業(yè)務(wù)模塊 就是在 ruoyi-module模塊 下新建一個(gè) springboot 工程模塊,大家既然都學(xué)到cloud了,我相信這一步也不用多

    2024年02月17日
    瀏覽(19)
  • 結(jié)合ruoyi-cloud和ruoyi-app實(shí)現(xiàn)微信小程序的授權(quán)登錄

    結(jié)合ruoyi-cloud和ruoyi-app實(shí)現(xiàn)微信小程序的授權(quán)登錄

    原視頻鏈接 https://www.bilibili.com/video/BV1mg4y1s75r/?spm_id_from=333.337.search-card.all.clickvd_source=c15794e732e28886fefab201ec9c6253 結(jié)合 RuoYi-Cloud 和 RuoYi-App 實(shí)現(xiàn)微信小程序的授權(quán)登錄。 之前講過前后端分離版的授權(quán)登錄,邏輯大致一致,不同點(diǎn)有: 微信頭像和昵稱的獲取方式。由于最新的本地

    2024年02月09日
    瀏覽(41)
  • 【云原生】3.5 RuoYi-Cloud部署實(shí)戰(zhàn)(下)

    【云原生】3.5 RuoYi-Cloud部署實(shí)戰(zhàn)(下)

    ?哈嘍~大家好呀,這篇呢我們接著上篇來講。 ???個(gè)人主頁:個(gè)人主頁?????? ? ? ? ? ? ? ???系列專欄:【云原生系列】 ??與這篇相關(guān)的文章:? ? ? ? ? ?? 【云原生】3.2 Kubernetes 實(shí)戰(zhàn)之多租戶系統(tǒng)實(shí)戰(zhàn) 【云原生】3.2 Kubernetes 實(shí)戰(zhàn)之多租戶系統(tǒng)實(shí)戰(zhàn)_程序猿追的博

    2024年02月03日
    瀏覽(23)
  • RuoYi-Cloud 若依微服務(wù)版啟動(dòng)教程(保姆級(jí))

    RuoYi-Cloud 若依微服務(wù)版啟動(dòng)教程(保姆級(jí))

    RuoYi-Cloud 是一個(gè) Java EE 企業(yè)級(jí)快速開發(fā)平臺(tái),基于經(jīng)典技術(shù)組合(Spring Boot、Spring Cloud Alibaba、Vue、Element),內(nèi)置模塊如:部門管理、角色用戶、菜單及按鈕授權(quán)、數(shù)據(jù)權(quán)限、系統(tǒng)參數(shù)、日志管理、代碼生成等。在線定時(shí)任務(wù)配置;支持集群,支持多數(shù)據(jù)源。 1、系統(tǒng)環(huán)境 J

    2023年04月09日
    瀏覽(83)
  • Docker容器化部署若依微服務(wù)ruoyi-cloud項(xiàng)目

    Docker容器化部署若依微服務(wù)ruoyi-cloud項(xiàng)目

    接下來的內(nèi)容以 Ubuntu 22.04.1 操作系統(tǒng)為例。 驗(yàn)證版本信息 Note: 在 CentOS7 上使用上述 yum 方式安裝的 Docker ,默認(rèn)自帶了Docker Compose Plugin,不過命令是 docker compose 。 docker pull docker run docker images docker ps docker logs docker start docker stop docker restart docker rmi docker rm docker exec docker netwo

    2024年02月04日
    瀏覽(23)
  • 【RuoYi-Cloud項(xiàng)目研究】【ruoyi-gateway模塊】網(wǎng)關(guān)的AuthFilter完成“認(rèn)證”,注意是認(rèn)證而不是權(quán)限

    過濾器的功能是檢驗(yàn)經(jīng)過網(wǎng)關(guān)的每一個(gè)請(qǐng)求,檢查 token 中的信息是否有效。 注意是“認(rèn)證檢查”,而不是“權(quán)限” ,權(quán)限是在每個(gè)服務(wù)的Controller上貼權(quán)限注解 1、在用戶完成登錄后,程序會(huì)把用戶相關(guān)的用戶、角色、權(quán)限等信息臨時(shí)存儲(chǔ)在 redis 中,并把token返回給終端用戶

    2024年02月07日
    瀏覽(16)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包