N多系统单点登录,实现、解决方案。四种解决方案

单点登录  SSO  )的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了 单点登录  的需求和应用领域;从技术本身的角度分析了 单点登录  技术的内部机制和实现手段,并且给出Web- SSO  和桌面 SSO  的实现、源代码和详细讲解;还从安全和性能的角度对现有的实现技术进行进一步分析,指出相应的风险和需要改进的方面。本文除了从多个方面和角度给出了对 单点登录  SSO  )的全面分析,还并且讨论了如何将现有的应用和 SSO  服务结合起来,能够帮助应用架构师和系统分析人员从本质上认识 单点登录  ,从而更好地设计出符合需要的安全架构。

单点登录是什么?

单点登录 (Single Sign On),简称为  SSO  ,是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。所以你会看到很多域名直接是sso.domain.com,也就是用来做单点登录 的。

如上图,一个用户请求N个系统,给用户的感觉是一个系统的感觉,而不要重复登录。

单点登录 是一个概念性东西,既然是概念,那么就有很多实现方式。

实现方案

根据不同的业务场景来不同的实现方式。下面来罗列一下对应的场景以及实现单点登录 的方式。

一、方案一。

        域名:a.sojson.com 、b.sojson.com、c.sojson.com、n.sojson.com

        描述:N个系统,但是 一级域名  是一致的。如果不懂 一级域名  二级域名  是什么意思先查看这篇博客。《单个项目多个二级域名简单实现思路》。这个案例实现相对简单,如下图:

PS:这个方案比较简单,只要提供公共的 SDK  即可,不需要第三个系统的出现,这个 SDK  的工作需要管理 Cookie  和用户信息。

原理:其实质这里就是利用了 二级域名  一级域名  Cookie 

优点:轻量级、可插拔、效率非常高。

缺点:局限性限于一级域名是一样的。

 

二、方案二

域名www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com

描述:域名比较乱,有同一个一级域名的(www.sojson.com、a.sojson.com),也有不同域名的。

这个稍微复杂一点,如下图:

原理:通过SSO 系统(登录、退出), Iframe  引用的方式引入Cookie.domain.com的方式,利用 Javascript  操作(写入 / 删除 / 修改)  cookie  ,而这个cookie.domain.com 域名是放入 CDN  上 ,获取用户信息当前系统直接通过 Redis  (只读)获取。

优点:因为是采用压力分化,Cookie.domain.com  部署在CDN上,这样的话,对各个系统造成的压力是 0 ,用第三方系统(SSO)维护,权限更大,操作性更强,但又Cookie 信息在当前域名的一级域下,获取简单,大量减少对 sso 的访问量。

缺点:如果浏览器安全性过高,Iframe 的方式操作 Cookie 将会失败。比如IE浏览器,目前正在攻克IE浏览器。

 

三、方案三

域名www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com

描述:域名比较乱,有同一个一级域名的(www.sojson.com、a.sojson.com),也有不同域名的。

(条件和方案二一样),实现思路如下图:

原理:所有的请求(登录、退出、获取用户信息、当前用户状态)都请求sso 系统,sso 系统维护用户信息, Session  UserInfo

优点:实现较为简单。

缺点SSO 压力非常大。

 

四、方案四

域名www.sojson.com、a.sojson.com、www.itboy.net、www.wenyiba.com

描述:域名比较乱,有同一个一级域名的(www.sojson.com、a.sojson.com),也有不同域名的。

(条件和方案二一样),实现采用 CAS  方式,这里就不做介绍了,资料非常多。

原理:和方案三类似。

优点:现成的,资料较多。

缺点:繁重、灵活性差。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
粒子群算法(Particle Swarm Optimization,PSO)是一种基于群体智能的优化算法,它模拟了鸟群、鱼群等群体的行为,通过不断迭代来寻找最优解。在优化直线阵天线中,可以将每个粒子看作一个天线元素,通过调整每个粒子的位置和速度来优化整个天线阵列的性能。 下面是使用MATLAB实现用粒子群算法优化直线阵天线的步骤: 1. 定义问题:首先需要定义直线阵天线的结构和目标函数。在这里,我们可以定义直线阵天线的长度、间距、方向等参数,并将天线的增益、阻抗匹配等指标作为目标函数。 2. 初始化粒子群:随机生成一定数量的粒子,每个粒子的位置和速度都是随机的。 3. 计算适应度:根据粒子的位置和目标函数,计算每个粒子的适应度值。 4. 更新全局最优和个体最优:找出所有粒子中适应度最好的粒子作为全局最优,同时对每个粒子记录它自己历史上最好的位置作为个体最优。 5. 更新速度和位置:根据全局最优和个体最优,更新每个粒子的速度和位置。 6. 检查收敛:如果满足收敛条件,则算法停止;否则,返回步骤3。 7. 输出结果:输出最优解及其对应的适应度值。 下面是一个简单的MATLAB代码示例,用于演示如何使用粒子群算法优化直线阵天线: ```matlab % 定义问题参数 N = 8; % 天线元素数量 L = 0.5; % 天线长度 d = 0.2; % 天线间距 theta = 30; % 天线方向 % 定义目标函数 fitness_func = @(x) -1 * antenna_gain(x, N, L, d, theta); % 初始化粒子群 num_particles = 50; num_dimensions = 2 * N; max_velocity = 0.5; min_position = [zeros(1, N), ones(1, N) * d]; max_position = [ones(1, N) * L, ones(1, N) * (L + d)]; particles = init_particles(num_particles, num_dimensions, min_position, max_position, max_velocity); % 迭代优化 num_iterations = 100; global_best_fitness = Inf; global_best_position = zeros(1, num_dimensions); for i = 1:num_iterations % 计算适应度 fitness_values = evaluate_fitness(particles, fitness_func); % 更新全局最优和个体最优 [particles, global_best_fitness, global_best_position] = update_best(particles, fitness_values, global_best_fitness, global_best_position); % 更新速度和位置 particles = update_particles(particles, global_best_position, max_velocity, min_position, max_position); % 输出结果 fprintf('Iteration %d, Best Fitness = %f\n', i, global_best_fitness); end % 输出最优解 fprintf('Best Position:\n'); disp(global_best_position); fprintf('Best Fitness = %f\n', global_best_fitness); % 定义天线增益函数 function gain = antenna_gain(position, N, L, d, theta) % 计算天线的坐标 x = (0:N-1) * d; y = zeros(1, N); for i = 1:N x(i) = x(i) * cosd(theta) + position(i) * sind(theta); y(i) = position(i) * cosd(theta); end % 计算天线增益 lambda = 0.1; k = 2 * pi / lambda; dx = 0.01; dy = 0.01; X = min(x):dx:max(x); Y = min(y):dy:max(y); [X, Y] = meshgrid(X, Y); Z = zeros(size(X)); for i = 1:N phase = k * (X * sin(theta) - Y * cos(theta) + y(i)); Z = Z + exp(1i * phase); end gain = abs(Z).^2; end % 初始化粒子群 function particles = init_particles(num_particles, num_dimensions, min_position, max_position, max_velocity) particles = struct('position', {}, 'velocity', {}, 'fitness', {}, 'best_position', {}, 'best_fitness', {}); for i = 1:num_particles position = rand(1, num_dimensions) .* (max_position - min_position) + min_position; velocity = randn(1, num_dimensions) .* max_velocity; fitness = Inf; best_position = position; best_fitness = Inf; particles(i) = struct('position', position, 'velocity', velocity, 'fitness', fitness, 'best_position', best_position, 'best_fitness', best_fitness); end end % 计算适应度 function fitness_values = evaluate_fitness(particles, fitness_func) num_particles = length(particles); fitness_values = zeros(1, num_particles); for i = 1:num_particles fitness_values(i) = fitness_func(particles(i).position); if fitness_values(i) < particles(i).best_fitness particles(i).best_fitness = fitness_values(i); particles(i).best_position = particles(i).position; end end end % 更新全局最优和个体最优 function [particles, global_best_fitness, global_best_position] = update_best(particles, fitness_values, global_best_fitness, global_best_position) num_particles = length(particles); for i = 1:num_particles if fitness_values(i) < global_best_fitness global_best_fitness = fitness_values(i); global_best_position = particles(i).position; end end end % 更新速度和位置 function particles = update_particles(particles, global_best_position, max_velocity, min_position, max_position) num_particles = length(particles); for i = 1:num_particles r1 = rand(1, length(particles(i).position)); r2 = rand(1, length(particles(i).position)); velocity = particles(i).velocity + r1 .* (particles(i).best_position - particles(i).position) + r2 .* (global_best_position - particles(i).position); velocity = max(-max_velocity, min(max_velocity, velocity)); position = particles(i).position + velocity; position = max(min_position, min(max_position, position)); particles(i).velocity = velocity; particles(i).position = position; end end ``` 在这个例子中,我们使用了一个简单的天线增益函数来计算天线阵列的性能,该函数假设所有天线元素都是相同的。如果需要考虑更多的因素,比如天线元素之间的互相影响、阻抗匹配等问题,可以将目标函数进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值