基础框架-文档中心基础框架-文档中心
使用指南
公共组件
开发测试
  • 微服务框架
  • Vue3框架
  • 项目实践
更新日志
  • V3.3.0
  • V3.2.6
  • V3.2.5
  • V3.2.4
  • V3.1.0
  • V2.2.x
  • V2.1.0
  • V2.0.0
  • V1.2.1
  • V1.1.1
使用指南
公共组件
开发测试
  • 微服务框架
  • Vue3框架
  • 项目实践
更新日志
  • V3.3.0
  • V3.2.6
  • V3.2.5
  • V3.2.4
  • V3.1.0
  • V2.2.x
  • V2.1.0
  • V2.0.0
  • V1.2.1
  • V1.1.1
  • 版本升级

    • 升级V3.3.0指南
    • 升级V3.2.6指南
    • 升级V3.2.5指南
    • 升级V3.2.4指南
    • 升级V3.x指南
    • 升级V2.2.x指南
    • 升级V2.1.0指南
    • 升级V2.0.0指南
    • 升级V1.2.1指南
    • 升级V1.1.1指南

升级V3.2.6指南

从V3.2.5版本与V3.2.6版本相关步骤,相关数据库脚本更新如下:

1、数据库

无数据库脚本更新。

2、后端升级

2.1、waf-parent依赖升级

后端只要将pom.xml中引用waf-parent版本改为3.2.6即可,启动后测试功能是否正常

  • 依赖更新
<parent>
    <groupId>com.wiseda.waf</groupId>
    <artifactId>waf-parent</artifactId>
    <version>3.2.6</version>
</parent>
  • WAF框架单点配置

如需要实现WAF框架应用的单点参照如下配置:

MAIN_SERVER_REST_URL:认证应用的服务地址(认证应用只要是基于waf框架,不需要一定要升级到3.2.6;单点集成应用版本需>=3.2.6 ),这里注意本地调试认证应用不要采用localhost,可以是本地的IP地址,不然会忽略认证。

MAIN_CONTEXT_PATH:认证应用上下文+版本号

waf:
  api:
    # api应用配置
    list:
      main:
        # url地址配置(可以为服务名+端口 K8S配置)
        server-rest-url: ${MAIN_SERVER_REST_URL:http://dmm-server-service:8081}
        # 主应用上下文路径
        context-path: ${MAIN_CONTEXT_PATH:/dmm-server/v2/waf}

3、前端升级

如需要实现WAF框架应用Vue2、Vue3的单点参照如下配置,细节处理可以自行完善,如应用超时后,应该跳转到主应用进行重定向该集成应用,或自行优化该处理逻辑

# 单点地址示例,在URL上添加ssoToken参数值
http://localhost:8800/waf-web?ssoToken=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJjbGltTmFtZSI6ImlnRnJUc2Nla0JBbjVWUjI4Q3BtL3c9PSIsImV4cCI6MTc1NzU3MTA4MH0.n5frlqj2-_2oWm7dwR1FVWu2jK5GCNwows1iCln3zqE

3.1、Vue2单点配置

  • 文件src/api/user.js ,添加一个ssoTokenLogin API接口,采用URL上带入token进行认证
export function ssoTokenLogin(ssoToken) {
  return request({
    url: `${prefix}/ssoLogin?token=${ssoToken}`, method: 'post'
  })
}
  • 文件src/store/modules/user.ts , 在actions中添加ssoTokenLogin ,注意如果有其他逻辑,自行添加,保持与ssoLogin()中逻辑一致。
actions: { 
    ......
    // 同框架token单点
  ssoTokenLogin({ commit, dispatch, state }, ssoToken) {
    return new Promise((resolve, reject) => {
      ssoTokenLogin(ssoToken).then(response => {
        // 清除tagsView缓存, 避免切换用户时, tags页签持续存在
        dispatch('tagsView/delAllViews', {}, { root: true }).then(res => { }).catch(() => { })
        const { data } = response
        commit('SET_CUSTOM_INFO', data)
        if (data.token) {
          commit('SET_TOKEN', data.token)
          Vue.ls.set(ACCESS_TOKEN, data.token, 24 * 60 * 60 * 1000)
        }
        if (data.showVerifyCode) {
          commit('SET_SHOW_VERIFY_CODE', data.showVerifyCode)
        }
        Vue.ls.set(AUTH_HEADER_CODE, data.authHeaderCode, 24 * 60 * 60 * 1000)
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  }
}

文件目录:src/permission.js ,

router.beforeEach(async (to, from, next) => {
 	  const userToken = to.query.token || Cookies.get(AUTHORIZATION_HEADER)
     // =========================单点登录认证代码======================================//
      // 同WAF框架单点token
      const ssoToken = to.query.ssoToken
      if (ssoToken) {
        // 检查token是否为合法有效token(同WAF框架互信token:since 3.2.6)
        store.dispatch('user/ssoTokenLogin', ssoToken).then(res => {
          if (res.token) {
            Vue.ls.set(ACCESS_TOKEN, res.token, 24 * 60 * 60 * 1000)
            hasToken(to, from, next)
          } else {
            // 获取token失败,执行后续登录
            hasToken(to, from, next)
          }
        }).catch((e) => { hasToken(to, from, next) })
      
      // =========================单点登录认证代码======================================//      
      } else if (userToken) {
        // 扫码登录成功后写入到cookie中的token,将其写入local storage token并移除cookie
        Vue.ls.set(ACCESS_TOKEN, userToken, 24 * 60 * 60 * 1000)
        Cookies.remove(AUTHORIZATION_HEADER)
        hasToken(to, from, next)
      } else {
        ......
    }

3.2、Vue3单点配置

  • 文件src/api/user.ts ,添加一个ssoTokenLogin API接口,采用URL上带入token进行认证
static async ssoTokenLogin(ssoToken: string): Promise<ResponseType> {
    return http.request({
      url: `${prefix}/ssoLogin?token=${ssoToken}`,
      method: 'post'
    })
  }
  • 文件src/store/modules/user.ts , 在actions中添加ssoTokenLogin ,注意如果有其他逻辑,自行添加,保持与ssoLogin()中逻辑一致。
actions: { 
    ......
    // 同框架token单点
    ssoTokenLogin(ssoToken: string) {
        return new Promise((resolve, reject) => {
            UserService.ssoTokenLogin(ssoToken).then(response => {
                const { data } = response
                this.setCustomInfo(data)
                if (data.token) {
                    this.setToken(data.token)
                    storage.set(ACCESS_TOKEN, data.token, 24 * 60 * 60 * 1000)
                }
                if (data.showVerifyCode) {
                    this.SET_SHOW_VERIFY_CODE(data.showVerifyCode)
                }
                storage.set(AUTH_HEADER_CODE, data.authHeaderCode, 24 * 60 * 60 * 1000)
                resolve(data)
            })
                .catch(error => {
                reject(error)
            })
        })
    }
}
  • 文件src/permission.js ,这里重新定义一个URL参数为ssoToken来单独判断,并调用sso接口,其他代码逻辑保持一致,注意自己的业务,如有区别自行调整。
router.beforeEach(async(to, from) => {
    ....
    const userToken = to.query.token || Cookies.get(AUTHORIZATION_HEADER)
   // =========================单点登录认证代码======================================//
    // 同WAF框架单点token
    const ssoToken: string = to.query.ssoToken as string
    if (ssoToken) {
      // 执行单点验证(如同WAF框架的单点)
        return await userStore.ssoTokenLogin(ssoToken).then(async res => {
          if ((res as any).token) {
            storage.set(ACCESS_TOKEN, (res as any).token, 24 * 60 * 60 * 1000)
            return await hasToken(to, from)
          } else {
             // 获取token失败,执行后续登录
            return await hasToken(to, from)
          }
        }).catch((e) => { hasToken(to, from) })
    // =========================单点登录认证代码======================================//   
    } else if (userToken) {
      // 扫码登录成功后写入到cookie中的token,将其写入local storage token并移除cookie
      storage.set(ACCESS_TOKEN, userToken, 24 * 60 * 60 * 1000)
      Cookies.remove(AUTHORIZATION_HEADER)
      return await hasToken(to, from)
    } else {
        ......
    }
}
上次更新: 9/11/25, 8:12 AM
编辑者: 李贤伟
Prev
升级V3.3.0指南
Next
升级V3.2.5指南