当前位置:   article > 正文

微服务两种方式登录

微服务两种方式登录

 

 

目录

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消费者

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

 

  1. @RequestMapping("/gotoLogin")
  2.     public String gotoLogin() {
  3.         return "login";
  4.     }
  5.     @RequestMapping("/loginEntity")
  6.     public ModelAndView loginEntity(User user) {
  7.         ModelAndView mav = new ModelAndView();
  8.         String result = restTemplate.postForObject("http://PROVIDER/loginProvider", user, String.class);
  9.         mav.addObject("result", result);
  10.         mav.setViewName("login");
  11.         return mav;
  12.     }

1.3生产者

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

依赖

  1. <dependency>         
  2. <groupId>org.springframework.boot</groupId>
  3.             <artifactId>spring-boot-starter-web</artifactId>
  4.         </dependency>
  5.         <dependency>
  6.             <groupId>org.springframework.cloud</groupId>
  7.             <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
  8.         </dependency>
  9.         <dependency>
  10.             <groupId>org.springframework.boot</groupId>
  11.             <artifactId>spring-boot-configuration-processor</artifactId>
  12.             <optional>true</optional>
  13.         </dependency>
  14.         <dependency>
  15.             <groupId>org.example.entity</groupId>
  16.             <artifactId>common</artifactId>
  17.             <version>1.0-SNAPSHOT</version>
  18.             <scope>compile</scope>
  19.         </dependency>
  20.         <dependency>
  21.             <groupId>com.mysql</groupId>
  22.             <artifactId>mysql-connector-j</artifactId>
  23.         </dependency>
  24.         <dependency>
  25.             <groupId>org.mybatis.spring.boot</groupId>
  26.             <artifactId>mybatis-spring-boot-starter</artifactId>
  27. </dependency>

配置文件

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

  1. server:
  2.   port: 8003
  3. eureka:
  4.   client:
  5.     service-url:
  6.       defaultZone: http://localhost:7000/eureka/
  7. spring:
  8.   datasource:
  9.     driver-class-name: com.mysql.cj.jdbc.Driver
  10.     url: jdbc:mysql://localhost:3306/my_sql_3
  11.     username: root
  12.     password: root
  13.   application:
  14.     name: PROVIDER
  15. mybatis:
  16.   mapper-locations: classpath:/mapper/*.xml
  17.   configuration:
  18.     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
  19.   type-aliases-package: org.example.entity

013dd93992704beab2f0aa77a752b127.png

控制层

  1. @RestController
  2. public class MyController {
  3.     @Autowired
  4.     MyUserService myUserService;
  5.     @RequestMapping("/loginProvider")
  6.     public String loginProvider(@RequestBody User user) {
  7.         User user1 = myUserService.getUser(user);
  8.         if(user1!=null){
  9.             return "登录成功,欢迎";
  10.         }else {
  11.             return "登录失败,暂无该用户,请注册";
  12.         }
  13.     }

访问层

  1. @Mapper
  2. public interface MyUserDao {
  3.   public userEntity getUser(userEntity user);
  4. }

实体类

  1. @Data
  2. public class userEntity {
  3.     public int id;
  4.     public String username;
  5.     public String password;
  6. }

实现类

  1. @Service
  2. public class MyUserServiceImpl implements MyUserService {
  3.     @Autowired
  4.     MyUserDao myUserDao;
  5.     @Override
  6.     public userEntity getUser(userEntity user) {
  7.         return myUserDao.getUser(user);
  8.     }
  9. }

mapper

  1. <mapper namespace="org.example.dao.MyUserDao">
  2.     <select id="getUser" resultType="User">
  3.         select *
  4.         from my_user
  5.         where username = #{username} and password=#{password}
  6.     </select>
  7. </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属性会作为微服务的名称,用于服务发现。

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

1b0905aaa477492e822da7a55d44cc09.png

2.2生产者

 

  1. @RequestMapping("/loginEntity")
  2.     public ModelAndView loginEntity(User user) {
  3.         ModelAndView mav = new ModelAndView();
  4. //        String result = restTemplate.postForObject("http://PROVIDER/loginProvider", user, String.class);
  5.         String result = userService.loginProvider(user);
  6.         mav.addObject("result", result);
  7.         mav.setViewName("login");
  8.         return mav;
  9.     }

最后效果一致。

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/494530
推荐阅读
相关标签
  

闽ICP备14008679号