首页 文章 精选 留言 我的

精选列表

搜索[图形后端],共10000篇文章
优秀的个人博客,低调大师

MaxKey 单点登录认证系统前后端分离 v3.5.2GA 发布

English|中文 概述 MaxKey单点登录认证系统,谐音马克思的钥匙寓意是最大钥匙,是业界领先的IAM身份管理和认证产品,支持OAuth 2.x/OpenID Connect、SAML 2.0、JWT、CAS、SCIM等标准协议,提供安全、标准和开放的用户身份管理(IDM)、身份认证(AM)、单点登录(SSO)、RBAC权限管理和资源管理等。 官方网站官网|官网二线 邮箱email:support@maxsso.net 代码托管Gitee|GitHub 单点登录(Single Sign On)简称为SSO,用户只需要登录认证中心一次就可以访问所有相互信任的应用系统,无需再次登录。 主要功能: 所有应用系统共享一个身份认证系统 所有应用系统能够识别和提取ticket信息 产品特性 标准协议 序号 协议 支持 1.1 OAuth 2.0/OpenID Connect 高 1.2 SAML 2.0 高 1.3 JWT 高 1.4 CAS 高 1.5 FormBased 中 1.6 TokenBased(Post/Cookie) 中 1.7 ExtendApi 低 1.8 EXT 低 登录支持 序号 登录方式 2.1 动态验证码 字母/数字/算术 2.2 双因素认证 2.3 短信认证 腾讯云短信/阿里云短信/网易云信 2.4 登录易/Google/Microsoft Authenticator/FreeOTP/支持TOTP或者HOTP 2.5 Kerberos/SPNEGO/AD域 2.6 OpenLDAP/ActiveDirectory/标准LDAP服务器 2.7 社交账号 微信/QQ/微博/钉钉/Google/Facebook/其他 2.8 扫码登录 企业微信/钉钉/飞书扫码登录 提供标准的认证接口以便于其他应用集成SSO,安全的移动接入,安全的API、第三方认证和互联网认证的整合。 提供用户生命周期管理,支持SCIM 2协议;开箱即用的连接器(Connector)实现身份供给同步。 简化微软Active Directory域控、标准LDAP服务器机构和账号管理,密码自助服务重置密码。 认证多租户功能,支持集团下多企业独立管理或企业下不同部门数据隔离的,降低运维成本。 认证中心具有平台无关性、环境多样性,支持Web、手机、移动设备等, 如Apple iOS,Andriod等,将认证能力从B/S到移动应用全面覆盖。 基于Java EE平台,微服务架构,采用Spring、MySQL、Tomcat、Redis、MQ等开源技术,扩展性强。 开源、安全、自主可控,许可证 Apache 2.0 License &MaxKey版权声明。 界面 MaxKey认证 登录界面 主界面 下载 当前版本百度网盘下载,历史版本 版本 日期 Docker 网盘 网盘提取码 v 3.5.2 GA 2022/07/14 链接 下载 mxk9 Roadmap 序号 计划 时间 1 Java 17+ 2022Q3 2 Jakarta EE 9+ 2022Q3 3 Spring Framework 6 2022Q4 4 Spring Boot 3 2022Q4 版本发行说明 MaxKey v 3.5.2 GA 2022/07/14 *(MAXKEY-220701) 网站界面图片更新 *(MAXKEY-220702) 注销问题修复 *(MAXKEY-220703) 单点注销功能增强 *(MAXKEY-220704) JWT单点登录参数丢失的修复 *(MAXKEY-220705) 跳转功能优化 *(MAXKEY-220706) 组织类型虚拟和实体组织 *(MAXKEY-220707) 应用管理 第三个页签下适配选项保存后无法显示 #I5DWS3 *(MAXKEY-220708) 删除系统的keystore,系统在NGINX中配置 *(MAXKEY-220709) 角色地址无法访问#I5E717 *(MAXKEY-220710) 角色新增的问题修复 *(MAXKEY-220711) token刷新问题修复 *(MAXKEY-220712) remove select apps protocol,机构管理 ->机构配置,groupName->roleName *(MAXKEY-220713) 新增用户无法输入手机号和工号 #68 *(MAXKEY-220714) 角色名称和应用名称字段修改 *(MAXKEY-220715) 登录错误提示信息 *(MAXKEY-220716) OAuth2自动提交认证 *(MAXKEY-220717) nacos bootstrap升级和优化 *(MAXKEY-220718) formbase用户初始化跳转问题修复 *(MAXKEY-220719) 返回前端message优化 *(MAXKEY-220720) 删除spring-data-redis依赖 *(MAXKEY-220721) 依赖项引用、更新和升级 springcloud 3.1.3 nacosclient 2.0.4 jedis 4.2.3 spring 5.3.21 springBoot 2.6.9 springSecurity 5.6.6

优秀的个人博客,低调大师

后端服务太多,且涉及多种语言,如何进行高效管理?

从本章开始,我们开始聊聊微服务内容。这里我们还是从场景入手,逐步展开说明,达到快速掌握微服务的一些组件实现原理,最终理解微服务架构的本质。 一、业务场景(八) 当前公司已经拥有了50多个服务,并且服务之间存在调用关系,而这些服务是使用各种语言编写的,比如Java、Go、Node.js。 因为跨语言,而目前流行的 Spring Cloud、Dubbo 都是针对 Java 语言的,所以我们没有使用 Spring Cloud、Dubbo 这些微服务框架。 那么,我们是如何配置各个服务之间的调用关系的呢?我们一起还原下当时的配置过程。 因为这 50 个服务都有负载均衡,所以我们首先需要把服务的地址和负载均衡全部配置在 Nginx 上,类似这样: upstream user-servers { server 192.168.5.150:80; server 192.168.5.151:80; } upstream order-servers { server 192.168.5.153:80; server 192.168.5.152:80; } … server{ listen 80; server_name user-servers; location / { proxy_pass http://user-servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } server{ listen 80; server_name order-servers; location / { proxy_pass http://order-servers; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } 而服务之间的调用关系主要通过本地配置文件配置,如下代码所示: user.api.host=https://user-servers/ order.api.host=https://order-servers/ 配置过程说明:我们先通过本地配置文件获取需要调用的服务的主机地址,再在代码中加上 URI 组装成 URL,然后所有服务之间的调用都通过 Nginx 代理,调用关系的架构图如下图所示: 那么,在以上这种架构中,我们到底会遇到哪些问题呢? 二、旧架构会出现的问题 1、配置烦琐,上线容易出错 上线部署时这个问题经常发生,因为每次增服务/加机器/减机器时,Nginx 都需要手工配置,而且每个环境都不一样,这样就很容易出错。 因此,服务器迁移或网络变动时,我们需要把这些配置重新捋一遍,并进行多轮测试才能确保没问题,要是我们没有进行详细检查,某些节点负载均衡出错了可能还不知道。 2、加机器要重 公司的流量起来后,通过监控我们发现有些服务需要增加机器,这个时候最考验系统的抗压性了。因为这个过程需要手工配置,稍不留神系统就会出错,比如一不小心按到了键盘多输了一个字符或没输对 IP。 而系统一旦出错,我们就需要重启 Nginx。我们设想下如果你是运维,请问那时你敢重启吗?要是重启失败了,那就完蛋了。因此,我们需要在短时间内确保配置准确无误,因为加机器是一件很急的事情,不会留给我们太多时间进行检查。 3、Nginx 单点 因为所有的服务都需要经过 Nginx 代理,所以 Nginx 很容易成为瓶颈。而如果 Nginx 配置出了问题,所有的服务就都不能用了,风险很大。好,那我们就让每个服务拥有自己的 Nginx ,而不是所有后台服务共用 1 个 Nginx 。这种方法可是可以,不过这种方式也很坑爹,当配置多了,运维出错概率也大了。 4、管理困难 在实际工作中,因为合规的要求,我们经常需要对全系统调用库进行升级,为了保证所有服务不遗漏,这就要求我们必须有一个后台服务清单。 考虑到后台服务清单都是通过手工进行维护的,所以我们需要定期对其进行整理,这着实是个苦力活。为了解决这个问题,我们尝试了不少解决方案,现在我分享 3 种有效的解决思路。 (1)将所有后台服务的服务清单及每种服务的服务器节点列表推送到所有的后台服务后,后台服务会自己控制调用哪个服务的哪个节点,这就是 Spring Cloud 和 Dubbo 的做法。(2)将所有的服务部署到容器上,然后利用 Kubernetes 的 Service 与 Pod 的特性进行服务注册发现。 具体操作:我们先在部署 User 服务的 Pod 上打上“User-App”标签,K8s 上就可以启动多个 User 的 Pod,其中 1 个 Service 叫 User Service,专门处理标签为“User-App”的 Pod,从 Client 过来的请求首先会到 User Service,再自动负载均衡到某个 User 服务的 Pod。(为了便于你理解,这里介绍的比较简单,如果你对 Kubernetes 感兴趣可以深入了解下。) (3)每个服务会自动将服务和 IP 注册到协调服务(比如 ZooKeeper),然后设计一个工具自动获取 ZooKeeper 中后台服务的机器列表,最终根据列表自动更新 Nginx 的配置,更新完后再重启。 最终我们的方案采用的是第一种解决思路。 不用第二种解决思路的原因是那时我们对容器不熟悉,且几年前,容器的生产环境还没有那么成熟,如果需要我们把所有的服务迁移到容器,代价跟风险都太大。 而不使用第三种解决思路的原因是它并没有解决 Nginx 单点瓶颈、加机器后需要重启的问题。 因此,最终我们的解决思路如下图所示: 通过这张架构示意图,我们发现整个解决思路过程分为这么几个步骤: 每个后台服务自动把服务类型和 IP 注册到中心存储; 中心存储将服务列表推送到每个后台服务; 后台服务在本地做负载均衡,轮流访问同服务的不同节点。 解决思路出来了,接下来我们看看都有哪些注意点需要考虑。这里,我总结了四点注意事项,希望对你有所帮助。 三、注意事项 1、中心存储使用啥技术? 其实通过上面内容的介绍,我们发现这个问题使用一个Redis就可以解决了,但还需要考虑以下两个需求: 服务变更的需求,实时推送所有后台服务。比如我们新增了一个服务器节点,服务器节点启动时会自动连接中央存储,当后台列表更新其他后台服务如何实时收到更新请求? 随时监听所有后台服务的状态,如果某个服务宕机了,及时通知其他服务。 对于以上两点需求,分布式协调服务这个中间件,刚好能全部满足,所以最终我们选择使用分布式协调服务来存储服务器列表。 2、到底使用哪个分布式协调服务? 关于到底使用哪个分布式协调服务技术的问题,网络上存在如下一个技术对比表格,内容超级详细,大家可以参考了解下。 看到这里,大家应该知道怎么选了吗?其实,在实际技术选型过程中,我们不光需要考虑技术本身,还需要考虑组织的背景。比如我们公司那时已经在使用 ZooKeeper,对于运维团队而言,他们一般不会同时维护 2 种协调服务中间件,所以我们最终没有选择 ZooKeeper 以外的协调服务。 基于 ZooKeeper 需要实现哪些功能? 我们这边需要实现的几个要点就是: 服务启动的时候,将信息注册到 ZooKeeper; 将所有的后台服务信息从 Zookeeper 拉取下来; 监听 ZooKeeper 事件,如果后台服务信息出现变更,就更新本地列表; 调用其他服务时,如果需要实现 1 个负载均衡策略,一般用轮询(Ribbon)就可以了。 上面几个要点整体来说,我们实现起来一点儿也不复杂。 ZooKeeper 宕机了怎么办? 因为后台服务都是多台部署,比如某个节点宕机了,我们需要保证同服务的其他节点还可以正常工作,所以我们的重点是保证 Zookeeper 集群的高可用。(ZooKeeper 本身就有集群的能力,我们就不赘述了。) ZooKeeper 设计本身为了一致性牺牲了高可用性,它同时兼着 Leader、Follower 和 Observer 三种角色,如果 Leader 或半数的 Follower 宕机了,Zookeeper 就会傲娇地进入漫长的恢复模式。而在这段时间里,Zookeeper 不接受客户端的任何请求,这就容易出现以下三种问题。 假设后台服务之前已经在本地已经有所有后台服务的清单,这个时候算运气好,后续你只需要保证这段时间新的后台服务器没有变更就行。 假设这段时间服务器刚好变更了,那就可能出现调用失败的情况。 假设后台服务在 ZooKeeper 恢复期间启动了,它便连不上 Zookeeper,也获取不到后台服务清单,这个最惨了。 听起来这个坑还挺大的,遇到以上问题我们该怎么办呢? 当时我们的做法是每次通过某个特定服务把所有服务清单同步一份到配置中心,新的后台服务获取不到服务清单时,再从配置中心获取。这个做法虽然没法解决 100% 的问题,但是已经算是一个性价比不错的方案了,而且到目前为止,我们的这个方案还没发生过以上说的那些问题。(也是运气好。) 四、总结 其实这个架构有点类似于自己造轮子,因为注册发现明明就是 Spring Cloud 或 Dubbo 已经实现的功能。不过,本篇文章意义在于可以帮助你从另外几个角度理解微服务中服务注册发现的实现原理。 如果您有更好的想法和方案,欢迎留言讨论。 关注个人公众号:服务端技术精选。

优秀的个人博客,低调大师

Kotlin 1.4.30 发布,具有新的 JVM 后端,语言和多平台特性

Kotlin 1.4.30 现已发布。这是最后的 1.4 增量版本,许多新的实验功能计划在 1.5.0 版本中更新至稳定。 主要更新内容 语言特性和编译器 新的JVM 用以生成稳定的二进制文件 支持内联类,并且在项目 Valhalla 可用时将支持 Valhalla 基本类。内联类以前是一种单独的语言功能,但现在它们已成为具有一个参数的值类的特定 JVM 优化 支持 Java 记录。Kotlin 代码“理解”了新的 Java 记录,并将它们视为具有 Kotlin 属性的类 支持密封接口。接口可以声明为密封的,也可以声明为类 构建工具 Kotlin Gradle 插件与 Gradle 配置缓存完全兼容,这样可以加快构建过程。请注意,此功能的多平台仍在Alpha 版中 Kotlin/Native 编译时间缩短 64 位 watchOS 模拟器支持 Xcode 12.2 SDK 支持 Kotlin/JS 顶级属性的延迟初始化已作为“实验”功能提供 标准库 引入实验性的与语言环境无关的 API,用于更改字符串和字符的大小写 将 Char 转换分为两组清晰命名的函数:用于获取 Char 的整数代码并构造 Char 的函数,以及用于将 Char 转换为其表示的数字的函数 详细内容请查看更新公告。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册