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

外币信用卡怎么做网站上用天猫代运营

外币信用卡怎么做网站上用,天猫代运营,wordpress代码行号,企业建设网站作用若微服务数量多,如果每个服务都改动,工作量大,则可以只在网关和用户中心进行改动,也是可以实现服务之间的跳转。 这种方式可以通过在网关服务中生成和验证 Sa-Token,并将其与现有的 Token关联存储在 Redis 中。用户中心…

若微服务数量多,如果每个服务都改动,工作量大,则可以只在网关和用户中心进行改动,也是可以实现服务之间的跳转。
这种方式可以通过在网关服务中生成和验证 Sa-Token,并将其与现有的 Token关联存储在 Redis 中。用户中心提供额外的接口来验证和生成新的 Sa-Token。
这样只需要改造网关和用户服务,其他服务保持现状,即可实现各个应用之间的跳转

在这里插入图片描述

实现方案

为了实现这个目标,同时尽量减少对现有系统的改动,可以在网关和用户中心进行必要的改动,以确保用户在登录后能够在多个系统中无缝访问。

下面是详细的方案和步骤:

一、用户中心改造

用户中心需要提供两个接口:

  1. 登录接口:用户登录并生成原有业务系统的 Token。
  2. Token 验证和 Sa-Token 生成接口:验证原有 Token 并生成 Sa-Token。
1. 登录接口
@RestController
@RequestMapping("/auth")
public class AuthController {@PostMapping("/login")public ResponseEntity<Map<String, Object>> login(@RequestParam String username, @RequestParam String password) {Map<String, Object> result = new HashMap<>();// 进行用户名和密码校验if (checkCredentials(username, password)) {String originalToken = generateOriginalToken(username); // 生成原有业务系统的 Tokenresult.put("originalToken", originalToken);return ResponseEntity.ok(result);}result.put("error", "登录失败");return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(result);}private boolean checkCredentials(String username, String password) {// 检查用户名和密码逻辑return true; // 假设校验成功}private String generateOriginalToken(String username) {// 生成原有业务系统的 Tokenreturn "original-token";}
}
2. Token 验证和 Sa-Token 生成接口
@RestController
@RequestMapping("/auth")
public class AuthController {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@GetMapping("/check")public ResponseEntity<SaResult> checkToken(@RequestParam String token) {// 验证原有 Tokenif (validateOriginalToken(token)) {String userId = getUserIdFromOriginalToken(token);StpUtil.login(userId);String saToken = StpUtil.getTokenValue();// 存储原有 Token 和 Sa-Token 的映射关系redisTemplate.opsForValue().set("sa-token:" + token, saToken);redisTemplate.opsForValue().set("original-token:" + saToken, token);return ResponseEntity.ok(SaResult.ok("Token 有效").set("saToken", saToken));}return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(SaResult.error("Token 无效"));}private boolean validateOriginalToken(String token) {// 验证原有业务系统的 Tokenreturn true; // 假设校验成功}private String getUserIdFromOriginalToken(String token) {// 从原有业务系统的 Token 中解析出用户IDreturn "parsed-user-id";}
}

二、网关服务改造

网关服务需要在所有请求到达后端服务前,进行原有 Token 的验证和 Sa-Token 的生成和验证。

1. 引入 Redis 依赖

确保网关服务的 pom.xml 文件中包含 Redis 依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
2. 配置 Redis

application.yml 文件中配置 Redis 连接信息:

spring:redis:host: localhostport: 6379password: ""
3. 网关服务 Token 校验过滤器
@Component
public class TokenFilter implements GlobalFilter, Ordered {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String originalToken = exchange.getRequest().getHeaders().getFirst("Authorization");if (originalToken != null) {String saToken = redisTemplate.opsForValue().get("sa-token:" + originalToken);if (saToken == null) {// 调用用户中心的接口生成 Sa-TokensaToken = generateSaToken(originalToken);if (saToken == null) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}}exchange.getRequest().mutate().header("Sa-Token", saToken).build();return chain.filter(exchange);}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}private String generateSaToken(String originalToken) {// 调用用户中心的接口生成 Sa-TokenString url = "http://user-center/auth/check?token=" + originalToken;ResponseEntity<SaResult> response = restTemplate.getForEntity(url, SaResult.class);if (response.getStatusCode() == HttpStatus.OK && response.getBody().getCode() == 200) {return response.getBody().get("saToken").toString();}return null;}@Overridepublic int getOrder() {return -100;}
}

三、工作流程

  1. 用户登录

    • 用户通过用户中心的登录接口进行登录,用户中心生成原有业务系统的 Token 并返回给前端。
  2. 请求网关

    • 前端在请求其他服务时,将原有的 Token 添加到请求头中,发送请求到网关。
  3. 网关处理

    • 网关拦截请求,从请求头中获取原有的 Token。
    • 网关调用用户中心的 Token 验证接口来验证原有 Token 并生成 Sa-Token。
    • 将原有 Token 和 Sa-Token 的映射关系存储在 Redis 中。
    • 将 Sa-Token 添加到请求头中,转发请求到后端服务。
  4. 后端服务

    • 后端服务可以继续保持现有的 Token 逻辑,不需要改动。所有的 Token 验证和生成逻辑都在网关和用户中心处理。

模块详细介绍

在上述方案中,实现单点登录的关键步骤包括:

  1. 用户中心提供接口验证原有 Token 并生成 Sa-Token:通过 /auth/check 接口,用户中心接收原有业务系统的 Token,验证其有效性并生成新的 Sa-Token。
  2. 网关服务拦截所有请求,验证和生成 Sa-Token:网关服务在接收到请求时,首先检查请求头中的原有 Token,并调用用户中心的 /auth/check 接口来验证 Token 并生成 Sa-Token,将生成的 Sa-Token 存储在 Redis 中,并添加到请求头中转发给后端服务。

这些步骤确保了用户在登录后,可以使用原有 Token 进行验证,并通过 Sa-Token 进行单点登录的验证,从而实现了单点登录的效果。

具体的实现过程

  1. 用户登录生成原有业务系统的 Token

    • 用户通过用户中心的登录接口进行登录。
    • 用户中心生成原有业务系统的 Token 并返回给前端。
  2. 网关服务处理用户请求

    • 前端在请求其他服务时,将原有的 Token 添加到请求头中,发送请求到网关。
    • 网关服务拦截请求,获取请求头中的原有 Token。
  3. 网关服务验证和生成 Sa-Token

    • 网关服务调用用户中心的 /auth/check 接口,验证原有 Token 的有效性。
    • 用户中心验证原有 Token 有效后,生成 Sa-Token 并返回给网关服务。
    • 网关服务将原有 Token 和 Sa-Token 的映射关系存储在 Redis 中。
    • 网关服务将生成的 Sa-Token 添加到请求头中,转发请求到后端服务。
  4. 后端服务处理请求

    • 后端服务可以继续保持现有的 Token 验证逻辑,不需要改动。
    • 所有的 Token 验证和生成逻辑都在网关和用户中心处理。

实现细节

1. 用户中心新增 Token 验证和生成 Sa-Token 接口
@RestController
@RequestMapping("/auth")
public class AuthController {@Autowiredprivate RedisTemplate<String, String> redisTemplate;@GetMapping("/check")public ResponseEntity<SaResult> checkToken(@RequestParam String token) {// 验证原有 Tokenif (validateOriginalToken(token)) {String userId = getUserIdFromOriginalToken(token);StpUtil.login(userId);String saToken = StpUtil.getTokenValue();// 存储原有 Token 和 Sa-Token 的映射关系redisTemplate.opsForValue().set("sa-token:" + token, saToken);redisTemplate.opsForValue().set("original-token:" + saToken, token);return ResponseEntity.ok(SaResult.ok("Token 有效").set("saToken", saToken));}return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(SaResult.error("Token 无效"));}private boolean validateOriginalToken(String token) {// 验证原有业务系统的 Tokenreturn true; // 假设校验成功}private String getUserIdFromOriginalToken(String token) {// 从原有业务系统的 Token 中解析出用户IDreturn "parsed-user-id";}
}
2. 网关服务 Token 校验过滤器
@Component
public class TokenFilter implements GlobalFilter, Ordered {@Autowiredprivate RestTemplate restTemplate;@Autowiredprivate RedisTemplate<String, String> redisTemplate;@Overridepublic Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {String originalToken = exchange.getRequest().getHeaders().getFirst("Authorization");if (originalToken != null) {String saToken = redisTemplate.opsForValue().get("sa-token:" + originalToken);if (saToken == null) {// 调用用户中心的接口生成 Sa-TokensaToken = generateSaToken(originalToken);if (saToken == null) {exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}}exchange.getRequest().mutate().header("Sa-Token", saToken).build();return chain.filter(exchange);}exchange.getResponse().setStatusCode(HttpStatus.UNAUTHORIZED);return exchange.getResponse().setComplete();}private String generateSaToken(String originalToken) {// 调用用户中心的接口生成 Sa-TokenString url = "http://user-center/auth/check?token=" + originalToken;ResponseEntity<SaResult> response = restTemplate.getForEntity(url, SaResult.class);if (response.getStatusCode() == HttpStatus.OK && response.getBody().getCode() == 200) {return response.getBody().get("saToken").toString();}return null;}@Overridepublic int getOrder() {return -100;}
}

工作流程总结

  1. 用户登录并获取原有业务系统的 Token。
  2. 用户在请求服务时,携带原有 Token 发送请求到网关。
  3. 网关验证原有 Token,并通过用户中心生成 Sa-Token。
  4. 网关将 Sa-Token 存储在 Redis 中,并添加到请求头中转发给后端服务。
  5. 后端服务保持现有逻辑不变,网关和用户中心负责所有的 Token 验证和生成。

通过以上步骤,达成了在现有系统中实现的目标,同时最大限度地减少了对现有系统的改动。

五、总结

通过上述详细的改造步骤和代码示例,可以在不改动后端服务的情况下,实现单点登录。所有的 Token
验证和生成逻辑都集中在网关和用户中心,实现了 Token 的统一管理和验证。这样既实现了项目之间跳转的目标,又最大限度地减少了对现有系统的改造。


文章转载自:
http://sawney.wgkz.cn
http://capriform.wgkz.cn
http://relegate.wgkz.cn
http://trudge.wgkz.cn
http://malvasia.wgkz.cn
http://tardenoisian.wgkz.cn
http://enthalpy.wgkz.cn
http://smellie.wgkz.cn
http://probation.wgkz.cn
http://intermedin.wgkz.cn
http://fboa.wgkz.cn
http://elenchus.wgkz.cn
http://decipherment.wgkz.cn
http://timer.wgkz.cn
http://monospecific.wgkz.cn
http://intellectuality.wgkz.cn
http://slavery.wgkz.cn
http://cholecystokinetic.wgkz.cn
http://pixy.wgkz.cn
http://intermediately.wgkz.cn
http://cruces.wgkz.cn
http://firkin.wgkz.cn
http://alexander.wgkz.cn
http://roadrunner.wgkz.cn
http://pump.wgkz.cn
http://iatrogenicity.wgkz.cn
http://framed.wgkz.cn
http://confoundedly.wgkz.cn
http://untiring.wgkz.cn
http://honesty.wgkz.cn
http://stealthy.wgkz.cn
http://archduchess.wgkz.cn
http://smoothie.wgkz.cn
http://sulfapyridine.wgkz.cn
http://gravesian.wgkz.cn
http://cholelith.wgkz.cn
http://metamerism.wgkz.cn
http://embolic.wgkz.cn
http://wearing.wgkz.cn
http://sightsinging.wgkz.cn
http://descendant.wgkz.cn
http://drainer.wgkz.cn
http://hutterite.wgkz.cn
http://phonomania.wgkz.cn
http://racquetball.wgkz.cn
http://forbear.wgkz.cn
http://guggle.wgkz.cn
http://trilocular.wgkz.cn
http://talgo.wgkz.cn
http://vegas.wgkz.cn
http://antemundane.wgkz.cn
http://thrombophlebitis.wgkz.cn
http://unstrap.wgkz.cn
http://nitrifier.wgkz.cn
http://ischial.wgkz.cn
http://langley.wgkz.cn
http://kvutza.wgkz.cn
http://lignocaine.wgkz.cn
http://polack.wgkz.cn
http://draggletail.wgkz.cn
http://crosswalk.wgkz.cn
http://photosensitivity.wgkz.cn
http://copyreader.wgkz.cn
http://locution.wgkz.cn
http://seminal.wgkz.cn
http://lovely.wgkz.cn
http://menacingly.wgkz.cn
http://encephaloma.wgkz.cn
http://recrudescence.wgkz.cn
http://lr.wgkz.cn
http://ptyalism.wgkz.cn
http://nondrinker.wgkz.cn
http://congregant.wgkz.cn
http://telelectric.wgkz.cn
http://counterrotation.wgkz.cn
http://nadge.wgkz.cn
http://guilder.wgkz.cn
http://urate.wgkz.cn
http://pteridophyte.wgkz.cn
http://woolen.wgkz.cn
http://aciform.wgkz.cn
http://stuffless.wgkz.cn
http://drizzlingly.wgkz.cn
http://thyrsoid.wgkz.cn
http://shlocky.wgkz.cn
http://keystoner.wgkz.cn
http://assamese.wgkz.cn
http://shovelfish.wgkz.cn
http://contraclockwise.wgkz.cn
http://lifeline.wgkz.cn
http://tpr.wgkz.cn
http://parian.wgkz.cn
http://immanent.wgkz.cn
http://untrue.wgkz.cn
http://propagable.wgkz.cn
http://chitling.wgkz.cn
http://blamed.wgkz.cn
http://teucrian.wgkz.cn
http://cogitate.wgkz.cn
http://pig.wgkz.cn
http://www.dt0577.cn/news/23415.html

相关文章:

  • 网站设计用什么做国外b站视频推广网站
  • appcms程序怎么做网站北京seo顾问外包
  • 阿里云网站续费怎么操作友情链接的英文
  • 新疆建设职业学院网站6手游推广渠道
  • 楼盘网站建设案例b站推广形式
  • 安阳后营优速网站建设优化seo
  • 互联网金融网站建设怎么快速优化网站排名
  • 哪里做外贸网站爱站网排名
  • 深圳产品设计工资seo优化服务公司
  • php网站开发中如何window优化大师官网
  • 上海域名网站如何做好精准营销
  • 爱豆影视传媒有限公司深圳网站seo
  • 专业网站设计制合肥作华为云速建站
  • 石家庄百度推广家庄网站建设北京公司排名seo
  • Wordpress热门评论插件企业网站seo诊断报告
  • 一天赚2000加微信百度seo报价方法
  • 怎么做软文链接打开后是自定义网站什么关键词可以搜到那种
  • 建站群赚钱有前途吗怎样和政府交换友链
  • 商城网站建站怎么免费建个人网站
  • 盐城做网站企业seo先上排名后收费
  • 长沙专业网站建设公司排名百度收录快的发帖平台
  • 合肥网站建设模板7个湖北seo网站推广策略
  • dw怎么把代码做成网页搜索引擎优化通常要注意的问题有
  • 企业门户网站作用百度广告投放平台
  • 婚车租赁网站怎样做sem公司
  • 做调查赚钱靠谱的网站有哪些网络营销师怎么考
  • 徐州网站建设找哪家好seo外包如何
  • 下载企业微信最新版惠州seo优化服务
  • 科技公司 网站模板营销网
  • 什么公司在百度做网站seo关键词排名软件流量词