当前位置: 首页 > wzjs >正文

6617网址导航彩票网站大全费县做网站

6617网址导航彩票网站大全,费县做网站,网络推广策划书范文,移动网站跟pc网站域名和空间有什么区别1. 概述 本文档详细介绍了将BladeX认证系统与若依(RuoYi)框架集成的完整实现过程。集成采用OAuth2.0授权码流程,使用户能够通过BladeX账号直接登录若依系统,实现无缝单点登录体验。 2. 系统架构 2.1 总体架构 #mermaid-svg-YxdmBwBtzGqZHMme {font-fa…

在这里插入图片描述

1. 概述

本文档详细介绍了将BladeX认证系统与若依(RuoYi)框架集成的完整实现过程。集成采用OAuth2.0授权码流程,使用户能够通过BladeX账号直接登录若依系统,实现无缝单点登录体验。

2. 系统架构

2.1 总体架构

1. 点击BladeX登录
2. 重定向到BladeX授权页
3. 用户授权
4. 返回授权码
5. 发送授权码
6. 请求令牌
7. 返回用户信息和令牌
8. 查找用户并生成令牌
9. 返回若依JWT令牌
10. 保存令牌并跳转
用户
若依前端
BladeX认证服务
若依回调页面
若依后端
若依Redis缓存
若依系统首页

2.2 关键组件

  • BladeAuthUtil: 工具类,处理与BladeX认证服务的通信
  • BladeAuthController: 后端控制器,处理授权码并生成若依JWT令牌
  • BladeCallback.vue: 前端页面,接收授权回调并处理认证结果

3. 后端实现

3.1 BladeAuthUtil工具类

public class BladeAuthUtil {public static Map<String, Object> getTokenByCode(String authUrl, String clientId, String clientSecret, String code, String redirectUri, String tenantId) {// 构建请求参数MultiValueMap<String, String> params = new LinkedMultiValueMap<>();params.add("grant_type", "authorization_code");params.add("code", code);params.add("client_id", clientId);params.add("client_secret", clientSecret);params.add("redirect_uri", redirectUri);if (tenantId != null && !tenantId.isEmpty()) {params.add("tenant_id", tenantId);}// 发送请求获取令牌try {RestTemplate restTemplate = new RestTemplate();HttpHeaders headers = new HttpHeaders();headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED);HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers);ResponseEntity<Map> response = restTemplate.exchange(authUrl, HttpMethod.POST, requestEntity, Map.class);return response.getBody();} catch (Exception e) {// 处理异常return null;}}
}

3.2 BladeAuthController控制器

@RestController
@RequestMapping("/blade/auth")
public class BladeAuthController {@Value("${blade.auth.url:}")private String authUrl;@Value("${blade.auth.client-id:}")private String clientId;@Value("${blade.auth.client-secret:}")private String clientSecret;@Value("${blade.auth.redirect-uri:}")private String redirectUri;@Autowiredprivate ISysUserService userService;@Autowiredprivate TokenService tokenService;@Autowiredprivate UserDetailsServiceImpl userDetailsService;@GetMapping("/getTokenInfo")public AjaxResult getTokenInfo(@RequestParam("code") String code, @RequestParam(value = "tenant_id", required = false) String tenantId) {// 获取BladeX令牌Map<String, Object> tokenInfo = BladeAuthUtil.getTokenByCode(authUrl, clientId, clientSecret, code, redirectUri, tenantId);// 提取用户名并查找若依系统用户if (tokenInfo != null && tokenInfo.containsKey("account")) {String userName = (String) tokenInfo.get("account");SysUser user = userService.selectUserByUserName(userName);if (user != null) {// 使用UserDetailsServiceImpl创建LoginUser对象LoginUser loginUser = (LoginUser) userDetailsService.createLoginUser(user);// 记录登录信息recordLoginInfo(user.getUserId());// 使用TokenService生成JWT令牌String token = tokenService.createToken(loginUser);// 返回令牌AjaxResult ajax = AjaxResult.success();ajax.put(Constants.TOKEN, token);return ajax;}}return AjaxResult.error("认证失败");}
}

4. 前端实现

4.1 登录页面增加BladeX登录按钮

<template><div class="login"><!-- 现有登录表单 --><!-- 添加BladeX登录按钮 --><el-button type="primary" class="blade-login-btn" @click="handleBladeLogin">使用BladeX登录</el-button></div>
</template><script>
export default {methods: {handleBladeLogin() {// BladeX授权页面URLconst bladeAuthUrl = process.env.VUE_APP_BLADE_AUTH_URL;const clientId = process.env.VUE_APP_BLADE_CLIENT_ID;const redirectUri = encodeURIComponent(process.env.VUE_APP_BLADE_REDIRECT_URI);// 跳转到BladeX授权页面window.location.href = `${bladeAuthUrl}?client_id=${clientId}&response_type=code&redirect_uri=${redirectUri}`;}}
}
</script>

4.2 BladeCallback.vue回调处理页面

<template><div class="blade-callback-container"><div class="callback-card"><div v-if="loading"><h2>正在处理BladeX授权...</h2><el-progress :percentage="progress"></el-progress></div><div v-else-if="error"><h2>授权处理失败</h2><p>{{ errorMessage }}</p><el-button type="primary" @click="returnToLogin">返回登录页</el-button></div></div></div>
</template><script>
import { Message } from 'element-ui';
import { setToken } from '@/utils/auth';export default {data() {return {loading: true,error: false,errorMessage: '',code: '',tenantId: ''};},created() {// 获取URL参数中的授权码this.code = this.$route.query.code;this.tenantId = this.$route.query.state || '';// 处理授权码this.handleAuthorizationCode();},methods: {// 处理授权码handleAuthorizationCode() {request({url: '/blade/auth/getTokenInfo',method: 'get',params: {code: this.code,tenant_id: this.tenantId}}).then(response => {if (response.code === 200 && response.data && response.data.token) {// 使用若依token登录this.handleLoginSuccess(response.data.token);} else {// 显示错误信息this.handleError(response.msg || '获取令牌失败');}}).catch(error => {this.handleError('获取令牌失败: ' + error.message);});},// 处理登录成功handleLoginSuccess(token) {// 保存tokensetToken(token);// 获取用户信息并生成路由this.$store.dispatch('GetInfo').then(() => {this.$store.dispatch('GenerateRoutes').then(accessRoutes => {// 动态添加可访问路由表this.$router.addRoutes(accessRoutes);// 跳转到首页this.$router.push({ path: '/' });});});}}
};
</script>

5. 配置说明

5.1 后端配置 (application.yml)

# BladeX认证配置
blade:auth:# BladeX认证服务地址url: https://auth.example.com/oauth/token# 客户端IDclient-id: your_client_id# 客户端密钥client-secret: your_client_secret# 重定向URIredirect-uri: http://your-app-url/auth/blade-callback

5.2 前端配置 (.env.development)

# BladeX配置
VUE_APP_BLADE_AUTH_URL=https://auth.example.com/oauth/authorize
VUE_APP_BLADE_CLIENT_ID=your_client_id
VUE_APP_BLADE_REDIRECT_URI=http://your-app-url/auth/blade-callback

5.3 安全配置

SecurityConfig.java中添加允许匿名访问的路径:

@Override
protected void configure(HttpSecurity httpSecurity) throws Exception {httpSecurity// 其他配置.antMatchers("/blade/auth/getTokenInfo",// 其他允许匿名访问的路径).permitAll()
}

6. 实现步骤

6.1 前置准备

  1. 向BladeX系统管理员申请OAuth2.0客户端ID和密钥
  2. 确认并配置授权回调URL
  3. 确保若依系统中存在与BladeX用户名相匹配的账号

6.2 后端实现步骤

  1. 创建BladeAuthUtil工具类
  2. 实现BladeAuthController控制器
  3. 在application.yml中添加BladeX配置
  4. 更新SecurityConfig安全配置

6.3 前端实现步骤

  1. 在登录页添加BladeX登录按钮
  2. 创建回调处理页面BladeCallback.vue
  3. 配置前端环境变量
  4. 更新路由配置,添加回调页面路由

6.4 路由配置

在前端路由配置中添加BladeX回调页面:

// router/index.js
export const constantRoutes = [// 其他路由{path: '/auth/blade-callback',component: () => import('@/views/auth/BladeCallback'),hidden: true}
]

7. 集成测试

7.1 测试流程

  1. 点击BladeX登录按钮,验证是否正确重定向到BladeX授权页面
  2. 在BladeX系统完成登录授权
  3. 验证是否正确重定向回若依系统
  4. 检查是否成功获取若依JWT令牌
  5. 验证是否成功进入若依系统首页
  6. 测试若依系统的各项功能是否正常

7.2 故障排查

  1. 检查浏览器控制台日志
  2. 查看后端日志输出
  3. 使用开发者工具检查网络请求
  4. 验证Redis中是否成功缓存了登录用户信息

8. 安全与性能考虑

8.1 安全

  • 确保client_secret不被暴露在前端代码中
  • 实现CSRF防护
  • 设置合理的token过期时间
  • 考虑实现单点登出功能

8.2 性能

  • 缓存用户权限信息
  • 考虑多Redis节点的情况下的token共享
  • 优化前端资源加载

9. 常见问题与解决方案

9.1 回调地址配置问题

问题:BladeX系统报错"重定向URI不匹配"

解决方案:确保在BladeX系统注册的重定向URI与application.yml和前端环境变量中配置的完全一致,包括协议、域名、端口和路径。

9.2 无法获取用户信息

问题:获取到BladeX令牌但无法获取用户信息

解决方案:检查请求参数是否正确,特别是client_id和client_secret,并确认BladeX用户账号是否有效。

9.3 若依系统找不到对应用户

问题:BladeX认证成功但若依系统找不到对应用户

解决方案:确保在若依系统中创建与BladeX用户名相匹配的账号,或实现自动创建用户的功能。

10. 结论

通过本文档介绍的方法,成功实现了BladeX单点登录与若依框架的无缝集成,用户可以使用BladeX账号直接登录若依系统,享受到统一认证的便利性。集成过程充分利用了若依现有的登录机制,最小化了代码修改,确保了系统的稳定性和安全性。

本集成方案具有以下优势:

  • 完全复用若依原生登录流程的后半部分,确保与系统其他部分的一致性
  • 令牌格式、存储、过期机制与原生系统保持一致
  • 最小化修改,降低集成风险
  • BladeX用户享有与普通登录用户相同的体验

文章转载自:

http://zGEvjluU.jcffp.cn
http://qgrGuLXK.jcffp.cn
http://ZfqRGdHb.jcffp.cn
http://VBn0Adjo.jcffp.cn
http://OW6ehVGN.jcffp.cn
http://TuPSeqS5.jcffp.cn
http://vkYRwPWA.jcffp.cn
http://XWMM3rRh.jcffp.cn
http://wgMPUPDD.jcffp.cn
http://Njy3YSUE.jcffp.cn
http://dn7MXjnI.jcffp.cn
http://yNRMGCZe.jcffp.cn
http://AXkll97o.jcffp.cn
http://ir7djB4b.jcffp.cn
http://wPn5mq3z.jcffp.cn
http://X05UU299.jcffp.cn
http://kkcPDzc1.jcffp.cn
http://dd1vOuq3.jcffp.cn
http://kfz0rtdh.jcffp.cn
http://JRof0Qhz.jcffp.cn
http://SpVOoIXt.jcffp.cn
http://YcTCHUsU.jcffp.cn
http://ff4ArAVA.jcffp.cn
http://VwB4qf48.jcffp.cn
http://J9prjNfX.jcffp.cn
http://Yfx8CQsA.jcffp.cn
http://5iX3q31H.jcffp.cn
http://jnOrcA42.jcffp.cn
http://edQPyh6f.jcffp.cn
http://xSHGdHM5.jcffp.cn
http://www.dtcms.com/wzjs/697067.html

相关文章:

  • app开发与网站建设十大免费ppt课件网站
  • 视频收费网站怎么做互联网大厂设计哪家口碑好
  • 买手表网站免费会员管理软件
  • 汶上县住房和城乡规划建设局官方网站一个网站完整详细的seo优化方案
  • 网站开发形式python3的网站开发
  • 织梦网站专题模板下载专做水果店加盟的网站
  • 中国都在那个网站上做外贸网站跳出率什么意思
  • 网站 平均加载时间网站默认后台登陆
  • 烟台有没有做网站网络技术服务包括哪些范围
  • 网站平台建设实训心得体会平潭综合实验区建设工程网站
  • 互联网软件门户网站三一国际网站设计
  • 安卓盒子做网站苏州做网站的专业公司哪家好
  • 质监站网址广告图片网站源码
  • 北京智能模板建站兴义做网站的公司
  • wordpress子网站河南招标投标信息网
  • 东莞+网站+建设+汽车百度app打开
  • 申请域名网站价格wordpress 变小程序
  • php网站开发cms装修设计合同范本
  • 浙江建设培训考试网站广州宣传片制作公司
  • 比较好的网页模板网站北京平台网站建设
  • wordpress建站知乎网站建设维护工作职责
  • 重庆网站关键字优化青龙建站教程
  • 网站怎么接广告赚钱营销型网站建设域名是
  • 网站建设与管理ppt模板专注网站基础优化
  • 广告设计网站官网wordpress开发者文档
  • 济南网站建设手机大型科技网站建设
  • 甘肃省住房建设厅户网站产品做网站
  • 任丘网站开发建设怎么选360浏览器显示2345网址导航
  • 找工作哪个网站好智联招聘群晖nas安装wordpress安装
  • 网站icp不备案有关系吗微网站建设及微信公众号