分布式项目 12 用jsonp来完成单点登录功能(两个系统之间进行信息交互)

news2024/11/25 1:05:04

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在项目中使用ctrl+H ,来快速查找相关的hrl请求。
在这里插入图片描述
在这里插入图片描述

首先全部的请求会进过jt-web,在进行对其他系统的通信。
在这里插入图片描述
说明:当点击“登录”或者"免费注册"跳转到登录或者注册页面。
在jt-web项目中,声明UserController资源,完成页面资源的调度,具体代码实现如下所示:

@Controller
@RequestMapping("/user")
public class UserController {
/**
登陆页面:http://www.jt.com/user/login.html
注册页面:http://www.jt.com/user/register.html
*实现通用页面跳转
*/
@RequestMapping("/{moduleName}")
public String module(@PathVariable String moduleName) {
return moduleName;
}
}

创建项目sso
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
修改新创建的pom.xml文件:

<dependencies>
		<dependency>
			<groupId>com.jt</groupId>
			<artifactId>jt-common</artifactId>
			<version>0.0.1-SNAPSHOT</version>
		</dependency>
	</dependencies>
<build>
		<plugins>
			<!--跳过测试类打包 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

在jt-common中创建pojo对象:

@TableName("tb_user")
@Data
@Accessors(chain =true)
public class User extends BasePojo{
	@TableId(type =IdType.AUTO)
	private Long id;
	private String username;
	private String password;
	private String phone;
	private String email;
}

在这里插入图片描述
创建数据库接口:在jt-sso项目下,创建一个数据层接口。

public interface UserMapper extends BaseMapper<User>{
}

再复制资源,将jt-manage项目中的src/main/resources目录下的所有的资源复制到jt-sso项目下的src/main/resources目录里。然后接下来,进行资源修改。
01.将mappers目录下的ItemMapper改为UserMapper
在这里插入图片描述

02.将properties目录下的image.properties删掉,此模块不涉及图片上传的业务,因为不需要image.properties中的配置信息。
03.修改application.yml文件中的tomcat服务器端口号改成8093

server:
port: 8093
servlet:
context-path: /
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
#如果需要项目发布,则数据库地址必须配置远程数据库
url: jdbc:mysql://127.0.0.1:3306/jtdb?
serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf8&autoReconnect=true
&allowMultiQueries=true
username: root
password: root
#配置视图解析器
mvc:
view:
prefix: /WEB-INF/views/
suffix: .jsp
#mybatis-plush配置
mybatis-plus:
type-aliases-package: com.jt.pojo
mapper-locations: classpath:/mybatis/mappers/*.xml
configuration:
map-underscore-to-camel-case: true
#日志记录 输出数据库的日志信息.
logging:
config: classpath:logging-config.xml
level:
com.jt.mapper: debug

04.将jt-manage中的主启动类复制一份到jt-sso中

@SpringBootApplication
@MapperScan("com.jt.mapper")
public class SpringBootRun {
public static void main(String[] args) {
SpringApplication.run(SpringBootRun.class, args);
}
}

在jt-sso中:
UserService接口:

package com.jt.service;
public interface UserService{
}

UserServiceImpl 接口实现类:

@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
}

UserController:

@RestController
public class UserController {
@Autowired
private UserService userService;
@RequestMapping("/getMsg")
public String test() {
return "单点登录项目搭建成功";
}
}

配置Nginx

#配置前台管理服务器
server {
listen 80;
server_name sso.jt.com;
location / {
#实现http请求的转发
proxy_pass http://localhost:8093;
}
}

以上都是搭建子系统,一个是前端的jt-web,一个是后台的jt-sso

正式写功能:
01.用户信息校验
在这里插入图片描述
前端的相关代码:

$.ajax({
url : "http://sso.jt.com/user/check/"+escape(pin)+"/1?r=" +
Math.random(),
dataType : "jsonp",
success : function(data) {
checkpin = data.data?"1":"0";
if (!data.data) {
validateSettings.succeed.run(option);
namestate = true;
}else {
validateSettings.error.run(option, "该用户名已占用!");
namestate = false;
}
}
});

在这里插入图片描述
在jt-sso后台的控制类中

/**
* 根据web中传递的参数,实现数据校验
* url:http://sso.jt.com/user/check/{param}/{type}
* 参数:param/type
* 返回值: SysResult对象
* JSONP跨域访问 需要数据的封装
*/
@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);
}
}

编辑jt-sso的UserService实现类

@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMaper;
/**
* 需要根据参数,查询数据库.
* type:1 username、2 phone、3 email
* 返回值: true用户已存在,false用户不存在,
*/
@Override
public Boolean checkUser(String param, Integer type) {
//String column = type==1?"username":(type==2?"phone":"email");
Map<Integer,String> map = new HashMap<Integer, String>();
map.put(1, "username");
map.put(2, "phone");
map.put(3, "email");
QueryWrapper<User> queryWrapper = new QueryWrapper<User>();
queryWrapper.eq(map.get(type), param);
int count = userMaper.selectCount(queryWrapper);
//返回值:true用户已存在,false用户不存在
return count==0?false:true;
}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【建议收藏】自动化测试框架开发教程

在自动化测试项目中&#xff0c;为了实现更多功能&#xff0c;我们需要引入不同的库、框架。 首先&#xff0c;你需要将常用的这些库、框架都装上。 pip install requests pip install selenium pip install appium pip install pytest pip install pytest-rerunfailures pip …

Vue 项目环境搭建和创建准备工作

一. 学习目标 掌握 Vue 项目创建的依赖环境掌握 Vue 项目创建过程 二. 学习内容 掌握搭建 Vue 项目准备环境掌握 Vue 项目创建过程了解 Vue 项目各子目录 三. 学习过程 1. 准备工作 &#xff08;1&#xff09;安装Node.js 打开node.js官网&#xff1a;Node.js &#xff0…

SpringBoot中事务失效的六个原因

SpringBoot中事务失效的原因&#x1f6a9; 常见的事务失效原因包括如下六个: 1. 事务方法非public修饰 由于Spring的事务是基于AOP的方式结合动态代理来实现的。因此事务方法一定要是public的&#xff0c;这样才能便于被Spring做事务的代理和增强。 而且&#xff0c;在Spri…

uniapp 横向滑动list(不同内容)分部问题:scroll-view,swiper overflow-x

横向滑动list,可使用标签&#xff1a; 1&#xff1a;scroll-view 2&#xff1a;swiper 3&#xff1a;overflow-x 正常来讲横向滑动的话 &#xff0c;需要特殊设置&#xff0c;只用view 设置display&#xff1a;flex&#xff0c;的话 无法横向滑动&#xff0c;右边的就会隐…

Melody 监控(四十九)

当新的世界出现&#xff0c;请立即向他奔去 上一章简单介绍了Spring Boot Actuator详解(四十八), 如果没有看过,请观看上一章 一. JavaMelody 一.一 什么是 Java Melody JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。 它允许自动存储由 Web 应用程序的实际操…

我的GIT练习Four

目录 前言 GIT安装教程 Git作者 GIT优点 GIT缺点 为什么要使用 Git GIT练习Four C1&#xff1a;初始化项目 C2&#xff1a;设计项目首页 C3&#xff1a;设计登录页面 C4&#xff1a;实现登录功能 C5&#xff1a;设计后台页面 C6&#xff1a;设计注册页面 C7&#xf…

Yolov5轻量化:CVPR2023|RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构

1.RIFormer介绍 论文:https://arxiv.org/pdf/2304.05659.pdf 本文基于重参数机制提出了RepIdentityFormer方案以研究无Token Mixer的架构体系。紧接着,作者改进了学习架构以打破无Token Mixer架构的局限性并总结了优化策略。搭配上所提优化策略后,本文构建了一种极致简单且…

第五期:字符串的一些有意思的操作

文章目录 1. 替换空格2. 字符串的左旋转3. 答案代码3.1 替换空格3.2 字符串的左旋转 PS&#xff1a;每道题解题方法不唯一&#xff0c;欢迎讨论&#xff01;每道题后都有解析帮助你分析做题&#xff0c;答案在最下面&#xff0c;关注博主每天持续更新。 1. 替换空格 题目描述 请…

Microsoft SQL Server 2019 详细安装教程

文章目录 系列文章目录前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 一、SqlServer2019安装步骤 双击运行好的setup.exe 选择安装&#xff0c;点击第一个全新独立安装 默认点击下一步 勾选介绍&#xff0c;点击下一步 点击下一步 点击下一步 勾选需要…

容器镜像分析工具dive

概述 dive是一个容器镜像分析工具&#xff0c;可以直观的看到容器每一层变动了哪些文件&#xff0c;每一层占用的磁盘空间&#xff0c;这样也就可以看到镜像的历史构建过程&#xff1b;同时也可以看到镜像的磁盘空间使用率&#xff0c;面对特别大的镜像文件是&#xff0c;可以…

问道手游-0基础架设教程

前言 本次教程使用的是问道魔改版的一个服务端、问道传奇、里面地图玩法基本与传奇类似 准备工具 1、Windows系统服务器一台 2、问道传奇服务端 开始架设 1、把准备好的问道传奇服务端解压到服务器D盘根目录记住必须得是根目录 不在根目录会导致快捷方式失效&#xff08;服务器…

ChatGPT新突破:打造自己的智能机器人控制系统

&#x1f496; 作者简介&#xff1a;大家好&#xff0c;我是Zeeland&#xff0c;全栈领域优质创作者。&#x1f4dd; CSDN主页&#xff1a;Zeeland&#x1f525;&#x1f4e3; 我的博客&#xff1a;Zeeland&#x1f4da; Github主页: Undertone0809 (Zeeland) (github.com)&…

【ArcGIS Pro二次开发】(35):三调三大类面积统计

根据《第三次全国国土调查技术规程》&#xff0c;三调中的地类可以归纳为土地管理法中规定的三大类用地。 我们可以在三调中直接统计出这三大类用地的面积。主要方法是在ArcGIS中将这三大类对应的用地提取出来&#xff0c;再进行统计。不过每次都要在复制一长串的筛选语句&…

Android Small框架增量升级方案

篇首语&#xff1a;本文由小常识网(cha138.com)小编为大家整理&#xff0c;主要介绍了Android Small框架增量升级方案相关的知识&#xff0c;希望对你有一定的参考价值。 背景 随着业务的发展&#xff0c;安装包的体积也在不断的增大&#xff0c;这时候&#xff0c;如果要版本…

vscode下,camke构建QT项目成功后,Cmake/Launch无法出现程序窗口的原因和解决方式

由于可执行程序根目录下没有 qt 相关 dll 文件&#xff0c;直接运行会出现一闪而过的问题&#xff0c;所以需要进入 build目录&#xff0c;终端运行类似如下指令&#xff1a; D:\QT\5.15.2\mingw81_64\bin\windeployqt.exe .\test001.exe 注意&#xff1a;环境变量不能配置ms…

计算机视觉特征图可视化与注意力图可视化(持续更新)

1.YOLOv5 特征图可视化 可视化代码&#xff1a; def feature_visualization(x, module_type, stage, n2, save_dirPath(runs/detect/exp)):"""x: Features to be visualizedmodule_type: Module typestage: Module stage within mod…

前端工程化-NPM

前端工程化-NPM 1&#xff0e;什么是NPMNPM安装基本使用 1&#xff0e;什么是NPM NPM代表npmjs.org这个网站&#xff0c;这个站点存储了很多Node.js的第三方功能包。 NPM的全称是Node Package Manager&#xff0c;它是一个Node.js包管理和分发工具&#xff0c;已经成为非官方的…

DR模式 LVS负载均衡群集部署

DR模式 LVS负载均衡群集部署 一、LVS-DR工作原理1.数据包流向分析2.LVS-DR中的ARP问题3.LVS-DR模式的特点 二、LVS-DR部署1.部署NFS服务器2.配置2台节点服务器3.部署调度服务器 一、LVS-DR工作原理 1.数据包流向分析 &#xff08;1&#xff09;客户端发送请求到 Director Serv…

Spring Cloud Ribbon源码解析,Ribbon为什么可以实现负载均衡,为什么可以用服务名调用

文章目录 一、Ribbon概述1、Ribbon简单使用&#xff08;1&#xff09;引包&#xff08;2&#xff09;使用方式一&#xff1a;RestTemplateLoadBalanced&#xff08;3&#xff09;使用方式二&#xff1a;LoadBalancerClient 2、问题来了 二、前置知识回顾1、复习Qualifier的作用…

时序逻辑与组合逻辑

目录 一、概念 二、区别 一、概念 数字电路按照逻辑功能一般可以分为组合逻辑和时序逻辑。组合逻辑电路是指不含有任何存储器件&#xff08;一般指寄存器&#xff09;的电路&#xff0c;它的输出只和当前电路的输入有关&#xff1b;时序逻辑电路含有存储器件&#xff0c;可以…