京东淘宝day15

1.实现用户数据校验

1.1 创建单点登录系统

1.1.1 创建项目

在这里插入图片描述

1.1.2 添加继承/依赖/插件

<parent>
        <artifactId>jt</artifactId>
        <groupId>com.jt</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>


    <!--添加jar包文件依赖-->
    <dependencies>
        <dependency>
            <groupId>com.jt</groupId>
            <artifactId>jt-common</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>

    <!--所有业务系统,必须添加build标签-->
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

1.1.3 完成jt-sso项目创建

在这里插入图片描述

1.1.4 实现反向代理

1).修改hosts文件
在这里插入图片描述
2). 编辑nginx.conf文件
在这里插入图片描述

1.1.5 测试效果展现

在这里插入图片描述

1.2 用户数据校验

1.2.1 业务说明

说明:当用户输入内容之后,当鼠标离焦时,应该发起Ajax请求去后端服务器JT-SSO校验数据是否存在. 如果数据存在应该提示用户,如果数据不存在则告知用户该数据可以使用.
在这里插入图片描述

1.2.2 页面分析

在这里插入图片描述

1.2.3 业务接口文档说明

包含的内容:
1).业务场景,业务功能属性等…
2).业务端调用的细节. web-sso
3).明确请求路径 url地址
4).明确请求的参数信息 几个 类型 作用
5).明确返回值结果 void xxxx 属性 对象
注意事项:
你以为的不一定是你以为的… 当需求不明确时 弄清业务之后在动手…
在这里插入图片描述

1.2.4 页面JS分析

1).定位哪些是写死的部分 http://sso.jt.com/user/check/
2).检索所有的代码 搜索需要的内容
在这里插入图片描述
在这里插入图片描述

1.2.5 编辑JT-SSO UserController

package com.jt.controller;

import com.fasterxml.jackson.databind.util.JSONPObject;
import com.jt.service.UserService;
import com.jt.vo.SysResult;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @RequestMapping("/getMsg")
    public String getMsg(){

        return "单点登录系统测试完成";
    }

    /**
     *  JSONP
     * 实现用户数据校验
     * url:http://sso.jt.com/user/check/{param}/{type}
     * 参数: /{param} 用户需要校验的数据
     *      /{type}   校验的字段.
     * 返回值: SysResult对象(true/false)
     */
    @RequestMapping("/check/{param}/{type}")
    public JSONPObject checkUser(@PathVariable String param,
                                 @PathVariable Integer type,
                                 String callback){

        //查询数据库获取响应信息.
        boolean flag = userService.checkUser(param,type);
        SysResult sysResult = SysResult.success(flag);
        return new JSONPObject(callback, sysResult);
        //callback(JSON结构)
    }




}

1.2.6 编辑JT-SSO UserService

package com.jt.service;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jt.mapper.UserMapper;
import com.jt.pojo.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;

@Service
public class UserServiceImpl implements UserService{

    private static Map<Integer,String> paramMap = new HashMap<>();
    static {
        paramMap.put(1,"username");
        paramMap.put(2,"phone");
        paramMap.put(3,"email");
    }
    @Autowired
    private UserMapper userMapper;


    /**
     * 根据用户传递的参数,获取数据库记录
     * @param param
     * @param type
     * @return
     */
    @Override
    public boolean checkUser(String param, Integer type) {
        String column = paramMap.get(type);
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq(column,param);
        int count = userMapper.selectCount(queryWrapper);
        //return count>0?true:false;
        return count>0;
    }
}

1.2.7 页面效果展现

在这里插入图片描述

2 HttpClient

2.1 远程访问调用流程

在这里插入图片描述

2.2 HttpClient介绍

HTTP 协议可能是现在 Internet 上使用得最多、最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源。虽然在 JDK 的 java net包中已经提供了访问 HTTP 协议的基本功能,但是对于大部分应用程序来说,JDK 库本身提供的功能还不够丰富和灵活。HttpClient 是 Apache Jakarta Common 下的子项目,用来提供高效的、最新的、功能丰富的支持 HTTP 协议的客户端编程工具包,并且它支持 HTTP 协议最新的版本和建议。HttpClient 已经应用在很多的项目中,比如 Apache Jakarta 上很著名的另外两个开源项目 Cactus 和 HTMLUnit 都使用了 HttpClient。现在HttpClient最新版本为 HttpClient 4.5 .6(2015-09-11)

2.3 HttpClient入门案例

2.3.1 添加jar包

 <!--添加httpClient jar包 -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
        </dependency>

2.3.2 编辑入门案例

public class TestHttpClient {

    /**
     * 1.实例化HttpClient客户端对象
     * 2.定义url地址
     * 3.定义请求类型
     * 4.发起httpClient请求
     * 5.获取响应结果 分析状态码信息  200 404 500 504 502
     * 6.获取结果,进行后续操作
     */
    @Test
    public void testGet() throws IOException {
        HttpClient httpClient = HttpClients.createDefault();
        String url = "http://www.baidu.com";
        HttpGet httpGet = new HttpGet(url);
        HttpResponse httpResponse = httpClient.execute(httpGet);
        if(httpResponse.getStatusLine().getStatusCode() == 200){
            //表示请求一切正常
            HttpEntity httpEntity = httpResponse.getEntity();//获取响应结果实体对象
            String result  = EntityUtils.toString(httpEntity, "UTF-8");
            System.out.println(result);
        }else{
            //表示请求有误
            System.out.println("请求结果有误!!!");
        }
    }
}

2.4HttpClient案例说明

2.4.1 业务场景

要求:
1)通过http://www.jt.com/user/findUserList,并且要求JSON结构返回用户数据…
2)JT-WEB服务器网址应该向JT-SSO获取用户信息.
URL: http://sso.jt.com/userfindUserList. 获取全部的用户信息.
使用HttpClient方式实现.

2.4.2 编辑JT-SSO UserController

/**
     * 完成HttpClient业务调用
     * url地址: http://sso.jt.com/user/findUserList
     * 返回值: UserJSON
     */
    @RequestMapping("/findUserList")
    public List<User> findUserList(){

        return userService.findUserList();
    }

2.4.3 编辑JT-SSO UserService

@Override
    public List<User> findUserList() {
        return userMapper.selectList(null);
    }

2.4.4 编辑JT-WEB UserController

 /**
     * 完成HttpClient测试
     * 1.url地址: http://www.jt.com/user/findUserList
     * 2.请求参数: 无
     * 3.返回值结果: List<User>集合
     */
    @RequestMapping("/findUserList")
    @ResponseBody
    public List<User> findUserList(){

        return httpClientService.findUserList();
    }

2.4.5 编辑JT-WEB HttpClientUserServiceImpl

@Service
public class HttpClientUserServiceImpl implements HttpClientService{

    //jt-web 需要访问jt-sso获取数据  HttpClient
    //http://sso.jt.com/userfindUserList
    @Override
    public List<User> findUserList() {
        List<User> userList = new ArrayList<>();
        String url = "http://sso.jt.com/user/findUserList";
        HttpClient httpClient = HttpClients.createDefault();
        HttpGet httpGet = new HttpGet(url);
        try {
            HttpResponse httpResponse = httpClient.execute(httpGet);
            if(httpResponse.getStatusLine().getStatusCode() == 200){
                String json =
                        EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
                userList = ObjectMapperUtil.toObject(json, userList.getClass());
            }
        } catch (IOException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        }

        return userList;
    }
}

3.微服务思想

3.1 SOA思想

面向服务的架构(SOA)是一个组件模型(编程方法),它将应用程序的不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和协议联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种各样的系统中的服务可以以一种统一和通用的方式进行交互。
在这里插入图片描述

3.2 RPC(规则)

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。

本地过程调用: 如果需要完成业务逻辑,则直接去调用本地的方法即可.
远程过程调用: 我想完成一个业务的调用,但是该功能我没有办法直接调用,需要通过第三方帮助我完成业务规则.
具体用法: RPC不关注具体的实现规则,用户也不需要了解具体的协议.谁调用谁实现.

3.3 Http协议规范

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Riqk_Qin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值