欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue-Element-Admin前端接入SSO的方法步驟

 更新時(shí)間:2022年04月28日 09:31:54   作者:kielin  
本文主要介紹了Vue-Element-Admin前端接入SSO的方法步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

概要

相信很多像我一樣初入門前端的時(shí)候,都是基于某個(gè)模板來學(xué)。 vue-element-admin 或者 vue-element-template是一個(gè)很好的模板。而在后期,一般公司都會(huì)要求接入SSO, 作者覺得這個(gè)太簡(jiǎn)單了,都是后臺(tái)的工作,前端 只需判斷后臺(tái)返回的token或者其他信息就可以,所以在相關(guān)文檔中也沒有太多提及。相信仍有一部分人無從下手,所以在這里重新記錄一下。

SSO

至于如果搭建SSO,這里不說,自行搜索。
我們用的SSO是基于: Apereo Central Authentication Service 5.3.9
假設(shè)搭建好的SSO地址是: https://sso.ekin.com

前端頁(yè)面

基于vue-element-admin前端頁(yè)面默認(rèn)地址:http://localhost:9528
如果你用的是windows,可以更改hosts文件: 127.0.0.1 test.ekin.com,
這樣前端頁(yè)面地址是:http://test.ekin.com:9528

1. config.js文件

這個(gè)文件放于src/config/sysConfig.js,內(nèi)容很簡(jiǎn)單,是兩個(gè)地址:

'use strict'
var sysConfig = {
?? ?//sso address
? casServerUrl: "https://sso.ekin.com",
? //frontend address
? sysDomain: "http://test.ekin.com:9528"
}
module.exports = sysConfig

2. SSO.js文件

放于前端目錄:src/utils/sso.js

import x2js from 'x2js'
import axios from 'axios'
const sysConfig = require('@/config/sysConfig')
import {
? getToken,
? setToken
} from '@/utils/auth'
import store from '../store'
import router from '../router'
const casServerUrl = sysConfig.casServerUrl
const sysDomain = sysConfig.sysDomain
const casLoginUrl = `${casServerUrl}/login`
export default {

? enableCasAuth() {
? ? const token = getToken()
? ? if (token) {
? ? ? return
? ? }

? ? if (this.isCasCallback()) {
? ? ? const ticket = this.getTicket()
? ? ? this.getAuthInfo(ticket).then(res => {
? ? ? ? debugger
? ? ? ? if (res.success) {
? ? ? ? ? const user_id = res.username.__text
? ? ? ? ? localStorage.setItem('name', user_id)
? ? ? ? ? this.login(user_id)
? ? ? ? } else {
? ? ? ? ? this.toAuth()
? ? ? ? }
? ? ? })
? ? } else {
? ? ? this.toAuth()
? ? }
? },
? toAuth() {
? ? location.href = `${casLoginUrl}?service=${sysDomain}`
? },
? toIndex(path) {
? ? location.href = sysDomain + '/#/' + path
? },
? getTicket() {
? ? var reg = new RegExp('(^|&)ticket=([^&]*)(&|$)', 'i')
? ? var r = window.location.search.substr(1).match(reg)
? ? if (r != null) return unescape(r[2])
? ? return null
? },
? getAuthInfo(ticket) {
? ? return axios.get(`/cas/serviceValidate?service=${sysDomain}&ticket=${ticket}`).then(res => {
? ? ? debugger
? ? ? const x2j = new x2js()
? ? ? var info = x2j.xml2js(res.data)
? ? ? if (info.serviceResponse.authenticationSuccess) {
? ? ? ? return {
? ? ? ? ? 'success': true,
? ? ? ? ? 'username': info.serviceResponse.authenticationSuccess.user
? ? ? ? }
? ? ? } else {
? ? ? ? return {
? ? ? ? ? 'success': false,
? ? ? ? ? 'username': ''
? ? ? ? }
? ? ? }
? ? })
? },
? isCasCallback() {
? ? const url = window.location.href
? ? return url.indexOf(sysDomain + '/?ticket=') != -1
? },
? logout() {
? ? location.href = `${casServerUrl}/logout?service=${sysDomain}`
? },
? getUserByUserId(user_id) {
? ? return axios.post(`http://[后臺(tái)服務(wù)地址]/user/token?userCode=${user_id}`)
? ? //返回的結(jié)構(gòu)大概想這樣:
? ? // let data = {
? ? // ? code: 1,
? ? // ? token: 'admin-token'
? ? // }

? },
? login(user_id) {
? ? this.getUserByUserId(user_id)
? ? ? .then(async (response) => {
? ? ? ? const data = response.data
? ? ? ? if (data.code === 1) {

? ? ? ? ? setToken(data.token)
? ? ? ? ? var token = data.token
? ? ? ? ? axios.defaults.headers.common['token'] = getToken()
? ? ? ? ? store.commit('user/SET_TOKEN', token)
? ? ? ? ? // const {
? ? ? ? ? // ? roles
? ? ? ? ? // } = await store.dispatch('user/getInfo')
? ? ? ? ? //為了方便,直接給予ADMIN權(quán)限
? ? ? ? ? let roles = ['ADMIN']
? ? ? ? ? const accessRoutes = store.dispatch('permission/generateRoutes', roles)
? ? ? ? ? router.addRoutes(accessRoutes)
? ? ? ? } else {
? ? ? ? ? router.push({
? ? ? ? ? ? path: '/401'
? ? ? ? ? })
? ? ? ? }
? ? ? })
? }
}

3. 修改permission.js文件

引入sso.js

import cas from '@/utils/sso'

更改router.beforeEach

router.beforeEach(async (to, from, next) => {
? // start progress bar
? NProgress.start()

? // set page title
? document.title = getPageTitle(to.meta.title)

? // determine whether the user has logged in
? const hasToken = getToken()

? if (hasToken) {
? ? // cut for breif
? } else {
? ? /* has no token*/

? ? if (whiteList.indexOf(to.path) !== -1) {
? ? ? // in the free login whitelist, go directly
? ? ? next()
? ? } else {
? ? ? // other pages that do not have permission to access are redirected to the login page.
? ? ? // next(`/login?redirect=${to.path}`)
? ? ? // NProgress.done()
? ? ? cas.enableCasAuth();
? ? ? next();
? ? ? NProgress.done();
? ? }
? }
})

4. 修改vue.config.js文件

?devServer: {
? ? port: port,
? ? open: true,
? ? disableHostCheck: true,
? ? overlay: {
? ? ? warnings: false,
? ? ? errors: true
? ? },
? ? proxy: {
? ? ? // change xxx-api/login => mock/login
? ? ? // detail: https://cli.vuejs.org/config/#devserver-proxy
? ? ? [process.env.VUE_APP_BASE_API]: {
? ? ? ? target: `http://127.0.0.1:${port}/mock`,
? ? ? ? changeOrigin: true,
? ? ? ? pathRewrite: {
? ? ? ? ? ['^' + process.env.VUE_APP_BASE_API]: ''
? ? ? ? }
? ? ? },
? ? ? //這個(gè)是我們加的
? ? ? '/cas/serviceValidate': {
? ? ? ? target: "https://sso.ekin.com",
? ? ? ? changeOrigin: true,
? ? ? ? pathRewrite: {
? ? ? ? ? '/cas': ''
? ? ? ? }
? ? ? }
? ? },
? ? after: require('./mock/mock-server.js')
? },

5. 運(yùn)行

這時(shí)應(yīng)該就可以請(qǐng)求http://test.ekin.com:9528,然后會(huì)跳轉(zhuǎn)的sso登陸頁(yè)面,輸入你的域帳號(hào)就能正常加載出網(wǎng)站頁(yè)面。

上面涉及到的兩個(gè)接口,是需要后臺(tái)提供的:

  • getUserByUserId
  • getUserRoles

但這兩個(gè)不想麻煩合并成一個(gè)就可以了,或者直接Mock數(shù)據(jù)返回就可以

到此這篇關(guān)于Vue-Element-Admin前端接入SSO的方法步驟的文章就介紹到這了,更多相關(guān)Vue-Element-Admin接入SSO內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue中的組件詳談

    Vue中的組件詳談

    這篇文章主要介紹了Vue的組件,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-10-10
  • vuex實(shí)現(xiàn)數(shù)據(jù)狀態(tài)持久化

    vuex實(shí)現(xiàn)數(shù)據(jù)狀態(tài)持久化

    今天小編就為大家分享一篇vuex實(shí)現(xiàn)數(shù)據(jù)狀態(tài)持久化,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Vue ElementUI中el-table表格嵌套樣式問題小結(jié)

    Vue ElementUI中el-table表格嵌套樣式問題小結(jié)

    這篇文章主要介紹了Vue ElementUI中el-table表格嵌套樣式問題小結(jié),兩個(gè)表格嵌套,當(dāng)父表格有children數(shù)組時(shí)子表格才展示,對(duì)Vue ElementUI中el-table表格嵌套樣式問題感興趣的朋友跟隨小編一起看看吧
    2024-02-02
  • 簡(jiǎn)單了解前端漸進(jìn)式框架VUE

    簡(jiǎn)單了解前端漸進(jìn)式框架VUE

    這篇文章主要介紹了前端漸進(jìn)式框架VUE的相關(guān)資料,文中講解的非常細(xì)致,幫助大家開始學(xué)習(xí)VUE,感興趣的朋友可以了解下
    2020-07-07
  • 淺談Vue-cli 命令行工具分析

    淺談Vue-cli 命令行工具分析

    本篇文章主要介紹了淺談Vue-cli 命令行工具分析,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-11-11
  • Vue 重置組件到初始狀態(tài)的方法示例

    Vue 重置組件到初始狀態(tài)的方法示例

    這篇文章主要介紹了Vue 重置組件到初始狀態(tài)的方法示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-10-10
  • Vue路由自動(dòng)添加#的問題及解決

    Vue路由自動(dòng)添加#的問題及解決

    這篇文章主要介紹了Vue路由自動(dòng)添加#的問題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • vue3+ts代理的使用

    vue3+ts代理的使用

    本文主要介紹了vue3+ts代理的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • VUE動(dòng)態(tài)生成word的實(shí)現(xiàn)

    VUE動(dòng)態(tài)生成word的實(shí)現(xiàn)

    這篇文章主要介紹了VUE動(dòng)態(tài)生成word的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • Vue3+vueuse實(shí)現(xiàn)放大鏡示例詳解

    Vue3+vueuse實(shí)現(xiàn)放大鏡示例詳解

    這篇文章主要為大家介紹了Vue3+vueuse實(shí)現(xiàn)放大鏡示例過程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07

最新評(píng)論