springclouddemo6服务消费者-account

从b站学习springcloud项目,现在进行总结,该总结除去了视频中出现的小错误,对有些易错的地方进行了提醒

b站链接:https://www.bilibili.com/video/av55629580?p=1
资料链接:
https://pan.baidu.com/s/1o0Aju3IydKA15Vo1pP4z5w
提取码: 21ru

上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103626809
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103641158

下面的内容总结:

module命名account→pom→bootstrap.yml→configserver创建本地配置→AccountApplication.java→entity2个实体类(User和Admin→repository接口(UserRepository和AdminRepository)→resources/mapping(2个.xml文件)→AccountHandler.java→检查

client/feign新建接口AccountFeign→client/controller中新建AccountHandler→现index.html删除,粘贴资料的index→account/admin复制至client→修改client/AccountHandler→ 检查

account:用户登录,用户分为 普通用户 和 管理员

实现细节:
1.新建module,命名为account,在其pom文件加入代码(和user的pom一样):

    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>

        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.11</version>
        </dependency>
    </dependencies>

2.讲user/resources中bootstrap.yml复制至account中,修改name为account:

spring:
  application:
    name: account
  profiles:
    active: dev
  cloud:
    config:
      uri: http://localhost:8762
      fail-fast: true

3.在configserver/shared复制一份user-dev.yml,但改名为account-dev.yml,修改代码,port为8050,name为account:

server:
  port: 8050
spring:
  application:
    name: account
  datasource:
    name: qwe
    url: jdbc:mysql://localhost:3306/qwe?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
    username: root
    password: 123456
    driver-class-name: com.mysql.cj.jdbc.Driver
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
mybatis:
  mapper-locations: classpath:/mapping/*.xml
  type-aliases-package: com.southwind.entity

运用多台创建接口,可分别查询管理员和用户的信息

4.在account/java创包com.southwind,在southwind创建启动类AccountApplication.java,加入代码:

package com.southwind;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
@MapperScan("com.southwind.repository")
public class AccountApplication {
    public static void main(String[] args) {
        SpringApplication.run(AccountApplication.class,args);
    }
}

5.创建account的实体类:在southwind中创包entity,将user/User复制至account/entity中
6.在entity中新建Admin,加入代码:

package com.southwind.entity;

import lombok.Data;

@Data
public class Admin {
    private long id;
    private String username;
    private String password;
}

7.在southwind创包repository,创建接口AdminRepository.java,加入代码:

package com.southwind.repository;

import com.southwind.entity.Admin;

public interface AdminRepository {
    public Admin login(String username , String password);
}

继续创建接口UserRepository.java,加入代码:

package com.southwind.repository;

import com.southwind.entity.User;

public interface UserRepository {
    public User login(String username , String password);
}

8.在account/resources中创包mapping,将user/resources/mapping中UserRepository.xml复制至account/mapping中,再复制一次,但改名为AdminRepository.xml

9.对于AdminRepository.xml,只保留findAll部分,其他删除
第3行的UserRepository 改为 AdminRepository
第5行的 id=“findAll” 改为 id=“login”
后面的 resultType=“User” 改为 resultType=“Admin”
第6行的

select * from t_user limit #{param1},#{param2} 

改为

 select * from t_admin where username = #{param1} and password = #{param2}

完整代码:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.AdminRepository">
	
	<select id="login" resultType="Admin">
		select * from t_admin where username = #{param1} and password = #{param2}
	</select>
</mapper>

10.对于UserReposiroey.xml,删除全部功能代码,将AdminRepository.xml中login部分复制进去,把第6行的 t_admin 改为 t_user,resultType=“Admin” 改为 resultType=“User”,其他不变:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.southwind.repository.UserRepository">

	<select id="login" resultType="User">
		select * from t_user where username = #{param1} and password = #{param2}
	</select>
</mapper>

11.在southwind创包controller,创建控制类AccountHandler.java添加代码:

package com.southwind.controller;

import com.southwind.repository.AdminRepository;
import com.southwind.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/account")
public class AccountHandler {

    @Autowired
    private AdminRepository adminRepository;
    @Autowired
    private UserRepository userRepository;

    @GetMapping("/login/{username}/{password}/{type}")
    //Object 即为多态
    public Object login(@PathVariable("username")String username , @PathVariable("password")String password, @PathVariable("type")String type){
        Object object = null;
        switch (type){
            case "user":
                object = userRepository.login(username,password);
                break;
            case "admin":
                object = adminRepository.login(username,password);
                break;
        }
        return object;
    }
}

检查,启动account
12. 进入 http://localhost:8050/account/login/admin1/123123/admin
其中admin1/123123是因为在t_admin中的数据是admin1 和 123123
在这里插入图片描述
成功查询管理员的数据!

进入 http://localhost:8050/account/login/zhangsan/123123/user
在这里插入图片描述
成功查询用户信息!

登录页面的实现:
1.在client/feign中新建接口AccountFeign,加入代码:
注意其类型是Object

package com.southwind.feign;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

@FeignClient(value = "account")
public interface AccountFeign {

    @GetMapping("/account/login/{username}/{password}/{type}")
    public Object login(@PathVariable("username")String username, @PathVariable("password")String password, @PathVariable("type")String type);
}

2.在client/static/login.html中可以看到没有th标签,这意味着我不需要在后台使用redirect作为映射!
在client/controller中新建AccountHandler.java,添加代码:
在login中的三个参数对应于client/login.html中的三个参数

package com.southwind.controller;

import com.southwind.feign.AccountFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

@Controller
@RequestMapping("/account")
public class AccountHandler {

    @Autowired
    private AccountFeign accountFeign;

    @PostMapping("/login")
    public String login(@RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("type")String type){
        Object object = accountFeign.login(username, password, type);
        System.out.println(object);
        return "index";
    }
}

检查,重启account 和 client
3. 进入 http://localhost:8030/login.html
在这里插入图片描述
在这里插入图片描述
登录后:
在这里插入图片描述
4.将自己现在的index.html删除,再把资料中index.html复制过来
5.将account/entity/Admin复制至client/entity中
6.在client/AccountHandler中第18行的 System.out.println(object); 删除
然后在参数表中加上 HttpSession session

package com.southwind.controller;

import com.southwind.entity.Admin;
import com.southwind.entity.User;
import com.southwind.feign.AccountFeign;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.LinkedHashMap;

@Controller
@RequestMapping("/account")
public class AccountHandler {

    @Autowired
    private AccountFeign accountFeign;

    @PostMapping("/login")
    public String login(@RequestParam("username")String username, @RequestParam("password")String password, @RequestParam("type")String type, HttpSession session){
        Object object = accountFeign.login(username, password, type);
        LinkedHashMap<String,Object> hashMap = (LinkedHashMap)object;
        String result = null;
        if(object == null){
            result = "login";
        }else{
            switch (type){
                case "user":
                    User user = new User();
                    String idstr = hashMap.get("id")+"";//转成String,而不能装置转换类型!
                    long id = Long.parseLong(idstr);
                    String nickname = (String)hashMap.get("nickname");
                    user.setId(id);
                    user.setNickname(nickname);
                    session.setAttribute("user",user);
                    result = "index";
                    break;
                case "admin":
                    Admin admin = (Admin) object;
                    session.setAttribute("admin",admin);
                    result = "";
                    break;
            }
        }
        return result;
    }
}

进入 http://localhost:8030/login.html,尝试登录
在这里插入图片描述
在这里插入图片描述
用户张三成功登录!

在client/index.html可以看到第13行有用户退出功能logout,现在实现之:
1.在client/controller的AccountHandler中添加代码:

    @GetMapping("/logout")
    public String logout(HttpSession session){
        session.invalidate();
        return  "redirect:/login.html";
    }

检查,启动eurekaserver,configserver,menu,account,client
2. 进入 http://localhost:8030/login.html,登录zhangsan
在这里插入图片描述
登录后:
在这里插入图片描述
点击退出后:

在这里插入图片描述
退出后就又回到登录页面了!

上一节链接:
https://blog.csdn.net/qq_40893824/article/details/103626809
下一节链接:
https://blog.csdn.net/qq_40893824/article/details/103641158

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值