微服务两种方式登录

 

 

目录

1.restTemplate方式

1.1页面

1.2消费者

1.3生产者

1.4效果

2.Feign方式

2.1Service

2.2生产者

 

三个生产者 一个消费者,三个生产者需要用mysql+mybatis 三个不同的数据库。

页面输入用户名和密码,提交到后端消费者,消费者传到生产者后端在进行判断,返回登录成功或登录失败到消费者,消费者再放到页面上进行显示。

1.restTemplate方式

restTemplate.getForObject 向远程取数据 两个参数url和数据类型

restTemplate.postForObject 向远程服务传参数 三个参数url、参数、返回值类型

@RequestBody 跨域(端口不同)得到对象数据,必须是post提交

1.1页面

 

1.2消费者

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>登录页面</title>
</head>
<body>
<form th:action="@{/loginEntity}" method="post"><span th:text="${result}"></span><input type="username" th:placeholder="请输入用户名" name="username"/><input type="password" placeholder="请输入密码" name="password" /><input type="submit" th:value="登录"/>
</form></body>
</html>

 

@RequestMapping("/gotoLogin")public String gotoLogin() {return "login";}@RequestMapping("/loginEntity")public ModelAndView loginEntity(User user) {ModelAndView mav = new ModelAndView();String result = restTemplate.postForObject("http://PROVIDER/loginProvider", user, String.class);mav.addObject("result", result);mav.setViewName("login");return mav;}

1.3生产者

因为使用负载均衡,所以不知道第一次回去那个生产者,所以每个生产者都需要写loginProvider。

依赖

<dependency>         <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional></dependency><dependency><groupId>org.example.entity</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId>
</dependency>

配置文件

三个生产者每个生产者各使用一个数据库,所以这里以生产者3为例

server:port: 8003
eureka:client:service-url:defaultZone: http://localhost:7000/eureka/
spring:datasource:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/my_sql_3username: rootpassword: rootapplication:name: PROVIDER
mybatis:mapper-locations: classpath:/mapper/*.xmlconfiguration:log-impl: org.apache.ibatis.logging.stdout.StdOutImpltype-aliases-package: org.example.entity

013dd93992704beab2f0aa77a752b127.png

控制层

@RestController
public class MyController {@AutowiredMyUserService myUserService;@RequestMapping("/loginProvider")public String loginProvider(@RequestBody User user) {User user1 = myUserService.getUser(user);if(user1!=null){return "登录成功,欢迎";}else {return "登录失败,暂无该用户,请注册";}}

访问层

@Mapper
public interface MyUserDao {public userEntity getUser(userEntity user);
}

实体类

@Data
public class userEntity {public int id;public String username;public String password;
}

实现类

@Service
public class MyUserServiceImpl implements MyUserService {@AutowiredMyUserDao myUserDao;@Overridepublic userEntity getUser(userEntity user) {return myUserDao.getUser(user);}
}

mapper

<mapper namespace="org.example.dao.MyUserDao"><select id="getUser" resultType="User">select *from my_userwhere username = #{username} and password=#{password}</select>
</mapper>

1.4效果

进入gotoLogin页面

b94ace54fab84b98ae9259371f0007cf.png

0d141633c7054c38b44af356e441d8a4.png

登录失败

79eedb8658fa43b2aa75f3e709846398.png

登录成功

8a43adf9d6704ae9b3074ab90a9fb665.png

2.Feign方式

Feign是Spring Cloud提供的声明式、模板化的HTTP生产者,它使得调用远程服务就像调用本地服务一样简单,只需要创建一个接口并添加一个注解即可。

 Spring Cloud集成Feign并对其进行了增强,使Feign支持了Spring MVC注解;Feign默认集成了Ribbon,所以Fegin默认就实现了负载均衡的效果。Spring Cloud 常见的集成方式是使用Feign+Ribbon技术来完成服务间远程调用及负载均衡的。

前端传值

287ab474d7bc4cffb90b96c109298e02.png

后端传值

e0d9ff719e7a42a2ab89f38706e87a5f.png

2.1Service

@FeignClient的属性name:指定FeignClient的名称,如果项目使用了Ribbon,name属性会作为微服务的名称,用于服务发现。

@Service
@FeignClient(name = "PROVIDER",fallbackFactory= MyFeignClientFallbackFactory.class)//name=客户端远程服务的名字,fallbackFactory一旦出现错误进入这个类中
public interface UserService {@RequestMapping("/loginProvider")public String loginProvider(User user);@RequestMapping("/getuser/{name}")public String getuser(@PathVariable("name") String name);
}

1b0905aaa477492e822da7a55d44cc09.png

2.2生产者

 

@RequestMapping("/loginEntity")public ModelAndView loginEntity(User user) {ModelAndView mav = new ModelAndView();
//        String result = restTemplate.postForObject("http://PROVIDER/loginProvider", user, String.class);String result = userService.loginProvider(user);mav.addObject("result", result);mav.setViewName("login");return mav;}

最后效果一致。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/638101.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

揭开ChatGPT面纱(3):使用OpenAI进行文本情感分析(embeddings接口)

文章目录 一、embeddings接口解析二、代码实现1.数据集dataset.csv2.代码3.运行结果 openai版本1.6.1 本系列博客源码仓库&#xff1a;gitlab&#xff0c;本博客对应文件夹03 在这一篇博客中我将使用OpenAI的embeddings接口判断21条服装评价是否是好评。 首先来看实现思路&am…

2024 IDM最新破解版及软件介绍

*IDM&#xff1a;信息时代的高效管理工具** 在快节奏的现代社会中&#xff0c;随着信息的爆炸式增长&#xff0c;如何高效、有序地管理信息成为每个人都需要面对的挑战。IDM&#xff0c;作为一种信息管理工具&#xff0c;正在逐渐受到人们的青睐。 IDM&#xff0c;全称Inform…

MariaDB InnoDB 空洞清理

1、背景 数据库占用服务器内存越来越高&#xff0c;除了bin-log文件之外&#xff0c;还发现了一些带有text或者longtext数据类型字段的表&#xff0c;这种表也会占用很高的服务器磁盘空间 数据库版本&#xff1a; 表引擎&#xff1a; InnoDB 数据量&#xff1a;清理之前1500万…

Qt基础之四十六:Qt界面中嵌入第三方程序的一点心得

本文主要讲解QWidget和QWindow的区别,以及如何在QWidget中嵌入第三方程序,并完美解决在QWidget中嵌入某些程序(比如Qt程序)时出现的白边问题。 下面是嵌入QQ音乐的样子,这首歌还不错。 先用spy++查看QQ音乐的窗口信息,如果安装了Visual Studio,工具菜单里自带spy++ 然后…

Docker搭建项目管理软件禅道

文章目录 一、简介二、部署三、使用 一、简介 禅道是以项目管理为核心的协作平台&#xff0c;旨在帮助团队高效地进行项目管理和协作。 禅道提供了项目管理、任务管理、团队协作、文档管理、报告统计等功能。 禅道官网 二、部署 操作系统&#xff1a;22.04.4 创建文件夹 …

netstat 命令的 Local Address 参数

一天在K8S环境部署项目是&#xff0c;部署之后项目始终访问不了。检查了是否开放端口、ingress配置、内部是否能访问等。最后万没想到&#xff0c;端口只能本地访问。一般来说项目端口开放了都是0.0.0.0&#xff0c;惯性思维导致了没去检查。。正好来说说 netstat 吧。netstat …

PyTorch与深度学习:探索现代神经网络的魅力

在科技飞速发展的今天&#xff0c;深度学习作为人工智能领域的重要分支&#xff0c;已经在图像识别、自然语言处理、语音识别等多个领域取得了突破性的进展。而PyTorch&#xff0c;作为一款开源的深度学习框架&#xff0c;以其简洁易用、动态计算图等特性&#xff0c;赢得了广大…

内网抓取Windows密码明文与hashdump思考题笔记整理

目录 思考题 第一题 第二题 第三题 第四题 第五题 思考题 1.windows登录的明文密码&#xff0c;存储过程是怎么样的&#xff0c;密文存在哪个文件下&#xff0c;该文件是否可以打开&#xff0c;并且查看到密文 2.我们通过hashdump 抓取出 所有用户的密文&#xff0c;分为…

设计模式——2_A 访问者(Visitor)

文章目录 定义图纸一个例子&#xff1a;如何给好奇宝宝提供他想知道的内容菜单、菜品和配方Menu(菜单) & Cuisine(菜品)Material(物料、食材) 产地、有机蔬菜和卡路里Cuisine & Material 访问者VisitorCuisine & Material 碎碎念访问者和双分派访问者和代理写在最后…

CSS——高级选择器

层次的选择器&#xff1a; <1> 后代选择器&#xff1a; 格式&#xff1a; 标签1 标签2{} 解释&#xff1a; 标签1 不生效&#xff0c;被标签1 嵌套中的 标签2才生效 举例&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charse…

Rust基本数据类型-切片

一、切片是什么&#xff0c;怎么用 1、切片是什么 切片并不是 Rust 独有的概念&#xff0c;在 Go 语言中就非常流行&#xff0c;它允许你引用集合中部分连续的元素序列&#xff0c;而不是引用整个集合。 对于字符串而言&#xff0c;切片就是对 String 类型中某一部分的引用&…

frp改造Windows笔记本实现家庭版免费内网穿透

文章目录 前言frp原理Windows服务端IP检验IP固定软件下载端口放行端口映射开机启动 NAS客户端端口查询软件下载端口检验穿透测试自启设置 Ubuntu客户端软件下载后台启动 后记 前言 之前一直用花生壳远程控制一个服务器&#xff0c;但最近内网的网络策略似乎发生了变化&#xf…