1 实现用户数据校验

1.1实现单点登陆系统

1.1.1新建项目
创建maven项目,取名为jt-sso

1.1.2添加jar包/依赖

<!--添加依赖--><dependencies><dependency><groupId>com.jt</groupId><artifactId>jt-common</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build>

1.1.3创建项目结构
实现包结构

application.yml

server:port: 8093servlet:context-path: /
spring:datasource:#引入druid数据源#type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3307/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=true#url: jdbc:mysql://192.168.126.129:8066/jtdb?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true&allowMultiQueries=trueusername: rootpassword: rootmvc:view:prefix: /WEB-INF/views/suffix: .jsp
#mybatis-plush配置
mybatis-plus:type-aliases-package: com.jt.pojomapper-locations: classpath:/mybatis/mappers/*.xmlconfiguration:map-underscore-to-camel-case: truelogging:level: com.jt.mapper: debug

启动项:

package com.jt;import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.jt.mapper")
public class SpringBootRun {public static void main(String[] args) {SpringApplication.run(SpringBootRun.class, args);}
}

UserController

package com.jt.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class UserController {@RequestMapping("/getMsg")public String doGetMsg(){return "实现单点登陆系统";}
}

host文件

nginx配置文件

重启nginx

编辑启动项

启动测试

1.2用户数据校验

1.2.1业务说明
说明:当用户输入内容之后,当鼠标离焦时,应该发起Ajax请求去后端服务器JT-SSO校验数据是否存在. 如果数据存在应该提示用户,如果数据不存在则告知用户该数据可以使用.
1.2.2页面请求分析

1.2.3 业务接口文档
包含的类容:
1)业务的场景,业务功能属性等…
2)业务端调用的细节 web-sso
3)明确请求的路径 url地址
4)明确请求的参数信息 几个 类型 作用
5)明确返回值结果 void xxxx属性 对象

检查数据是否可用:

用户注册:

用户登陆:

通过ticket查询用户信息

1.2.4页面JS分析
怎样快速定位发ajax请求的位置?????
搜索的方式检查代码的位置 先要分析请求路径的写死部分 利用检索所有代码,查找需要代码

ctrl+H




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 {@Autowiredprivate 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");}@Autowiredprivate UserMapper userMapper;/*** 根据用户传递的参数,获取数据库记录* @param param* @param type* @return*/@Overridepublic 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远程访问的调用流程

跨域(无法对结果进行二次操作):

跨域请求信息和返回值结果均显示在前端,有安全性问题:



跨域仅用于获取简单信息

HTTPClient

是微服务架构的底层实现
由service对参数和返回值进行封装,再由程序内部发起HTTP请求(此时浏览器不能监控)

2.2HTTPClient介绍

2.3入门案例

2.3.1添加jar包

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

2.3.2 编辑入门案例

package com.jt;import com.sun.deploy.net.HttpUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.junit.jupiter.api.Test;import java.io.IOException;public class TestHTTPClient {/*** 1.实例化httpCliet客户端对象* 2.定义url地址* 3.定义请求类型* 4.发起httpCliet请求* 5.获取响应结果 分析状态码信息  200 404 504 502* 6 获取结果,进行后续操作* */@Testpublic void testGet() throws IOException {HttpClient httpClient= HttpClients.createDefault();String url="http://www.baidu.com";HttpGet httpGet=new HttpGet(url);httpClient.execute(httpGet);//获取响应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.4 HttpClient案例说明

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

2.4.1编辑JT-SSO UserController

/***   URL:http://sso.jt.com/userfindUserList*   返回UserJSON** */@RequestMapping("/findUserList")public List<User> findUserList(){return userService.findUserList();}
**2.4.2  UserServiceImpl**
 @Overridepublic List<User> findUserList() {return userMapper.selectList(null);}

2.4.3 编辑jt-web前端页面
UserController

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate HttpClientService httpClientService;/*** 通过http://www.jt.com/user/findUserList* 请求参数:无* 返回值结果:List<User>集合*  * */@RequestMapping("/findUserList")public List<User> doFindUserList(){return httpClientService.findUserList();}

HttpClientServiceImpl

package com.jt.service;import com.jt.pojo.User;
import com.jt.util.ObjectMapperUtil;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.springframework.stereotype.Service;import java.io.IOException;
import java.util.ArrayList;
import java.util.List;@Service
public class HttpClientServiceImpl implements HttpClientService{//jt-web 需要访问jt-sso获取数据  HttpClient//http://sso.jt.com/userfindUserList@Overridepublic 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.1SOA思想

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

3.2RPC

RPC是远程过程调用(Remote Procedure Call)的缩写形式。SAP系统RPC调用的原理其实很简单,有一些类似于三层构架的C/S系统,第三方的客户程序通过接口调用SAP内部的标准或自定义函数,获得函数返回的数据进行处理后显示或打印。
总结: 需要调用第三方完成本地的服务. 服务A想要完成某项任务,但是自己手中没有该资源,则通知服务B 帮我去完成该操作. 这样的操作方式称之为RPC
理解:由不同的服务之间进行的通讯就称为RPC。RPC通讯无需了解协议的细节,像调用本地服务一样简单,RPC调用本质就是代理思想的应用
本地过程调用:如果需要完成业务瑞吉,直接调用本地业务逻辑
远程过程调用:
具体用法: RPC不关注具体的实现guiz,用户不需要了解具体的协议,谁调用谁实现

3.4Http协议的规范



区别:
1.RPC是传输层协议(4层).而HTTP协议是应用层协议(7层).
2.RPC协议可以直接调用中立接口,HTTP协议不可以.
3.RPC通信协议是长链接,HTTP协议一般采用短连接需要3次握手(可以配置长链接添加请求头Keep-Alive: timeout=20).
(长连接,指在一个连接上可以连续发送多个数据包,在连接保持期间,如果没有数据包发送,需要双方发链路检测包。)
4.RPC协议传递数据是加密压缩传输.HTTP协议需要传递大量的请求头信息.
5.RPC协议一般都有注册中心.有丰富的监控机制.

SpringBoot part4 day15相关推荐

  1. SpringBoot part4 day04

    1.页面结构 <%@ page language="java" contentType="text/html; charset=utf-8"pageEnc ...

  2. SpringBoot part4 day17

    电脑启动顺序: 1 检查linux中防火前状态 firewall-cmd --state: 2 启动电脑,在dos中键入services.msc,将vmware所有相关类容打开,将数据库打开: 3 启 ...

  3. day15【前台】项目发布

    day15[前台]项目发布 1.OSS 1.1.开通OSS服务 进入控制台,选择[对象存储OSS] 立即开通 同意协议 开通完成后,前往控制台创建Bucket 1.2.创建Bucket 创建Bucke ...

  4. SpringBoot项目的两种打包方式分析

    点击上方关注 "终端研发部" 设为"星标",和你一起掌握更多数据库知识 作者: 枕边书 来源: zhenbianshu.github.io Part1前言 最近 ...

  5. 继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错? springboot 两种方式稳定解决跨域问题

    继承WebMvcConfigurer 和 WebMvcConfigurerAdapter类依然CORS报错???springboot 两种方式稳定解决跨域问题! 之前我写了一篇文章,来解决CORS报错 ...

  6. Dockerfile springboot项目拿走即用,将yml配置文件从外部挂入容器

    Dockerfile 将springboot项目jar包打成镜像,并将yml配置文件外挂. # 以一个镜像为基础,在其上进行定制.就像我们之前运行了一个 nginx 镜像的容器,再进行修改一样,基础镜 ...

  7. SpringBoot部署脚本,拿走即用!

    一个可以直接拿来使用的shell脚本,适用于springboot项目 #!/bin/bash # 这里可替换为你自己的执行程序,其他代码无需更改,绝对路径相对路径均可. # 若使用jenkins等工具 ...

  8. SpringBoot项目使用nacos,kotlin使用nacos,java项目使用nacos,gradle项目使用nacos,maven项目使用nacos

    SpringBoot项目使用nacos kotlin demo见Gitte 一.引入依赖 提示:这里推荐使用2.2.3版本,springboot与nacos的依赖需要版本相同,否则会报错. maven ...

  9. springboot整合swagger2之最佳实践

    来源:https://blog.lqdev.cn/2018/07/21/springboot/chapter-ten/ Swagger是一款RESTful接口的文档在线自动生成.功能测试功能框架. 一 ...

  10. SpringBoot中实现quartz定时任务

    Quartz整合到SpringBoot(持久化到数据库) 背景 最近完成了一个小的后台管理系统的权限部分,想着要扩充点东西,并且刚好就完成了一个自动疫情填报系统,但是使用的定时任务是静态的,非常不利于 ...

最新文章

  1. Redis的数据结构及应用场景
  2. hive(让我凌乱的一天)
  3. stdio.h iostream.h iostream 三者
  4. 使用Eclipse和Open Liberty的Java EE 8上的Java 9
  5. 02-合并frame
  6. Kalman Filter --卡尔曼滤波
  7. Android Studio使用jni、so库
  8. Illustrator 教程,认识 Illustrator 中的工作区
  9. 算法:回溯九 Plus在数字字符串中加入加号,求所有情况的和
  10. Linux系统安装Nvidia显卡驱动
  11. unity 获取 AudioSource 分贝值
  12. 学习笔记 Tianmao 篇 recyclerView 的自定义使用
  13. How to change the implementation (detour) of an externally declared function
  14. ValueError: n_splits=4 cannot be greater than the number of members in each class
  15. VMware虚拟机安装及Linux系统的配置
  16. 文献管理软件——Endnote和Noteexpress选择哪个较为合适?
  17. 爱奇艺小程序陪你嗨一夏
  18. 2019python下半年考试报名时间_【2019下半年CATTI考试报名时间汇总】- 环球网校
  19. 计算机网络中关于路由器的作用
  20. pe下找不到ssd硬盘_快启动PE中没有识别到固态硬盘的解决方法

热门文章

  1. 【Java】soap协议发送webservice请求工具类
  2. Wechat协议初探
  3. 关于 联想昭阳 E43A 无线开关设置的 正确解决办法
  4. 计算机打印纸如何盖章,怎样使电脑制作的印章具有手动盖章效果
  5. (12) 基于深度时空残差网络ResNet的城市交通流预测
  6. 线性插值和双线性插值
  7. 兄弟连php留言,LAMP兄弟连PHP课程学习笔记 第五天 循环语句
  8. 谷歌胜诉!10年Java版权案终结;京东、美团等10家平台承诺不用大数据杀熟;百度网盘海外版上传下载不限速 | EA周报
  9. 数据安全--安全网关
  10. 显示器接口_显示器接口 - CNZHIQIANG