ruoyi cloud集成casdoor

这篇具有很好参考价值的文章主要介绍了ruoyi cloud集成casdoor。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

        之前写过一篇关于ruoyi cloud集成cas的但是使用的apereo的单点登录,该应用的文档都是英文文档,尝试一下集成casdoor,其官方文档比较详细。

考虑到有些小伙伴上git不方便,需要用到的代码和Windows工具,都在这了        

1、环境搭建

  • Go 1.6+
  • Node.js LTS (16或14) 这里我使用的是14.19.0,因为项目使用的这个
  • git

    我沿用了之前的服务器,所以在官网下载Go 1.9的windows安装包

    下载msi,傻瓜式安装,cmd输入go version,出现版本号,收工

     后两项就不写了,网上太多

2、casdoor部署

创建文件夹,右键git bash

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

下载完成代码后,进入casdoor-master文件夹,修改conf,修改app.conf文件,datasourcename:数据库的用户名,密码,地址,dbName:数据库名

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"

进入cmd,切换国内代理

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

使用命令运行后端

go run main.go

进入web文件夹,cmd,下载yarn

npm install --global yarn

验证yarn是否安装完成

yarn --version

安装前端依赖

yarn install

前端运行

yarn start

3配置casdoor

1、新建组织,将密码类型呢改成bcrypt,并开启软删除

2、新建同步器,配置数据库密码,修改表列 

ruoyi cloud集成casdoor

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

4、新建应用和证书,在新建的应用中,选择新创建的证书,在重定向urls内添加

http://localhost:81/login

4修改若依前端

1、安装vue-sdk

npm i casdoor-vue-sdk --save

2、执行指令

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: "应用名称",
  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">若依后台管理系统</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,
      // 验证码开关
      captchaEnabled: false,
      // 注册开关
      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("进入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 }
  })
}

可以尝试运行,是否会跳转,是否能返回code和state

5、修改若依后端

1、导入依赖

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

2、新建实体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新增三个方法

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内新增casdoor配置文章来源地址https://www.toymoban.com/news/detail-464724.html

server: 
  port: 36000
casdoor:
  endpoint: casdoor地址
  client-id: 客户端id
  client-secret: 客户端密钥
  certificate: 证书名称
  jwtPublicKey: 证书公钥,注意拷下来的公钥,每一行结尾加\n\,如"-----BEGIN CERTIFICATE-----\n\
  MIIE2TCCAsGgAwIBAgIDAeJAMA0GCSqGSIb3DQEBCwUAMCYxDjAMBgNVBAoTBWFk\n\
 .
 .
 .
  teANTdYzr6IIZiweG1/vvAXIk4HfjyVtOvxYAa6tfe0hpXDhCcqsO2ekpm0H\n\
  -----END CERTIFICATE-----"
  organization-name: 组织名称
  application-name: 应用名称

到了这里,关于ruoyi cloud集成casdoor的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • RuoYi-Cloud-Plus 登录过程源码

    登录界面 ruoyi-ui/src/views/login.vue 点击登录按钮进入handleLogin方法 loginForm actions中的Login方法 后端登录 src/main/java/com/ruoyi/auth/controller/TokenController.java src/main/java/com/ruoyi/auth/service/SysLoginService.java 远程调用src/main/java/com/ruoyi/system/api/RemoteUserService.java 登录类型src/main/java/com/ruoyi/com

    2024年02月03日
    浏览(24)
  • ruoyi-cloud微服务新建子模块

    相关文章 官方文档 1、复制system模块 直接复制 modules下面已有的system模块,改名为 test 2、在modules下的 pom.xml文件中添加子模块 test 这里要注意添加的位置是在 modules下的 pom.xml,也就是 test的父模块的 3、进入 test模块修改 pom.xml 把原有的system 修改成test,把 modules-system修改成

    2024年02月13日
    浏览(28)
  • ruoyi-cloud—若依微服务打包部署

    1. 前端端口修改 2. 后端端口修改 (1)修改ruoyi-gateway服务中的bootstrap.yml的port端口  (2)修改ruoyi-ui中的vue.confing.js的target中的端口 3. 后端部署 (1) 在本地电脑上代码界面上打包后端 在 ruoyi 项目的 bin 目录下执行 package.bat 打包Web工程,生成jar包文件。不同模块版本会生成在

    2024年01月21日
    浏览(50)
  • 若依微服务版启动(RuoYi-Cloud)教程

    之前一直有小伙伴咨询若依微服务版如何在本地启动,今天简单的给大家介绍一下。 首先,学习Java的小伙伴应该对若依框架都应该有所了解,RuoYi-Cloud 是一个 Java EE 分布式 微服务架构平台,基于经典技术组合(Spring Boot、Spring Cloud Alibaba、Vue、Element),内置模块如:部门管

    2024年01月18日
    浏览(29)
  • 若依cloud(RuoYi-Cloud)新增业务模块和功能模块增删改查演示

    前言 看了几篇文章感觉都不太满意,索性自己来写一篇。 一、后端 后端新建业务模块流程大致如下: 看一下目录结构, business 就是我们自己的业务模块: 1.0 新建业务模块 就是在 ruoyi-module模块 下新建一个 springboot 工程模块,大家既然都学到cloud了,我相信这一步也不用多

    2024年02月17日
    浏览(36)
  • 结合ruoyi-cloud和ruoyi-app实现微信小程序的授权登录

    原视频链接 https://www.bilibili.com/video/BV1mg4y1s75r/?spm_id_from=333.337.search-card.all.clickvd_source=c15794e732e28886fefab201ec9c6253 结合 RuoYi-Cloud 和 RuoYi-App 实现微信小程序的授权登录。 之前讲过前后端分离版的授权登录,逻辑大致一致,不同点有: 微信头像和昵称的获取方式。由于最新的本地

    2024年02月09日
    浏览(45)
  • 【云原生】3.5 RuoYi-Cloud部署实战(下)

     哈喽~大家好呀,这篇呢我们接着上篇来讲。  🥇个人主页:个人主页​​​​​              🥈 系列专栏:【云原生系列】 🥉与这篇相关的文章:             【云原生】3.2 Kubernetes 实战之多租户系统实战 【云原生】3.2 Kubernetes 实战之多租户系统实战_程序猿追的博

    2024年02月03日
    浏览(32)
  • RuoYi-Cloud 若依微服务版启动教程(保姆级)

    RuoYi-Cloud 是一个 Java EE 企业级快速开发平台,基于经典技术组合(Spring Boot、Spring Cloud Alibaba、Vue、Element),内置模块如:部门管理、角色用户、菜单及按钮授权、数据权限、系统参数、日志管理、代码生成等。在线定时任务配置;支持集群,支持多数据源。 1、系统环境 J

    2023年04月09日
    浏览(45)
  • Docker容器化部署若依微服务ruoyi-cloud项目

    接下来的内容以 Ubuntu 22.04.1 操作系统为例。 验证版本信息 Note: 在 CentOS7 上使用上述 yum 方式安装的 Docker ,默认自带了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日
    浏览(30)
  • 【RuoYi-Cloud项目研究】【ruoyi-gateway模块】网关的AuthFilter完成“认证”,注意是认证而不是权限

    过滤器的功能是检验经过网关的每一个请求,检查 token 中的信息是否有效。 注意是“认证检查”,而不是“权限” ,权限是在每个服务的Controller上贴权限注解 1、在用户完成登录后,程序会把用户相关的用户、角色、权限等信息临时存储在 redis 中,并把token返回给终端用户

    2024年02月07日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包