1.ssoåshiroçåºå«
2.XXL-SSO v1.1.0,序源 分布式单点登录框架
3.Spring Cloud + Spring Boot + Mybatis + Uniapp 企业架构之CAS SSO单点登录框架
4.jtk和maxkey什么区别
5.lldb 小记和std::string的数据结构图源码阅读
6.åç¹ç»å½SSOåçåå®ç°
ssoåshiroçåºå«
SSOæ¯åç¹ç»å½ï¼Shiroæ¯æé管çï¼ä½æ¯é åCASå¯ä»¥å®ç°SSOæ¨èä¸å¥å®æ´çShiro Demoï¼å è´¹çã
Shiroä»ç»ææ¡£ï¼/shiroDemoå·²ç»é¨ç½²å°çº¿ä¸ï¼ShiroDemo: å¦æå¯ç é误ï¼è¯·ç¨sojsonãPSï¼ä½ å¯ä»¥æ³¨åèªå·±çå¸å·ï¼ç¶åç¨ç®¡çåèµæéç»ä½ èªå·±çå¸å·ï¼ä½æ¯ï¼æ¯åéä¼ææ°æ®åå§åä¸æ¬¡ã建议èªå·±ä¸è½½æºç ï¼è®©Demoè·èµ·æ¥ï¼ç¶åè·çæ´å¿«ã
XXL-SSO v1.1.0, 分布式单点登录框架
分布式单点登录框架XXL-SSO,一款旨在实现一次登录即可访问所有互信应用系统的代码高效工具。其轻量级、序源分布式、代码跨域特性,序源同时支持Cookie+Token,代码偷拍php源码兼容Web与APP,序源开箱即用。代码
XXL-SSO旨在解决企业内部应用系统登录繁琐问题,序源用户只需完成一次身份验证,代码即可自由访问所有互信系统。序源其设计秉持简洁高效原则,代码确保系统运行流畅,序源提升用户体验。代码
支持跨域访问是序源XXL-SSO的一大亮点,无论系统部署在不同网络环境,用户均能顺利访问,试玩app网站源码极大便利了企业内部不同部门间的协同工作。同时,该框架兼容多种登录验证方式,包括Cookie与Token,满足不同场景下的安全需求。
对于Web与APP应用,XXL-SSO提供了统一的登录框架,无论是网页端还是移动端,用户只需通过统一的登录入口完成身份验证,即可在不同终端之间无缝切换,享受一致的登录体验。
XXL-SSO现已开放源代码,技术爱好者与开发者可轻松获取、学习并定制化使用。同时,官方提供丰富文档与技术交流平台,文字内容生成源码为用户解决使用过程中遇到的问题,共同推动框架发展。
Spring Cloud + Spring Boot + Mybatis + Uniapp 企业架构之CAS SSO单点登录框架
了解单点登录(SSO)是一种在多个相关应用之间共享认证信息的机制。SSO主要特点在于使用统一的登录入口,通过Web协议(如HTTPS)实现应用之间的认证。单点登录体系包括用户、Web应用和SSO认证中心三个角色。SSO实现基于三个核心原则:所有登录操作在SSO认证中心执行;认证中心通过方法告知Web应用访问用户是否已通过认证;SSO认证中心与所有Web应用建立信任关系。
CAS SSO单点登录体系由CAS Server和CAS Client组成。CAS Server负责用户信息认证,独立部署,处理凭证(Credentials)。CAS Client部署在客户端,当有对本地Web应用受保护资源的访问请求时,重定向到CAS Server进行认证。
采用CAS SSO单点登录无需依赖Cookie实现跨域,柠檬视频影视源码优势明显。在不同站点间无需重新登录,即便站点域名不同。传统方案可能遇到Cookie跨域问题,解决复杂。CAS SSO单点登录的官方文档和源代码可直接访问:apereo.org/projects/cas。推荐下载稳定版本,如4.2.1,避免使用最新版本可能存在的不稳定情况。通过远程Maven库下载cas-server-webapp的war包,步骤包括访问Maven地址搜索并下载最新版本。下载cas-client-core的jar包,支持Spring MVC开发,适用于多种协议与开发语言。CAS架构图展示了其组件与工作流程,根据项目需求选择合适的宝塔安装源码教程版本进行部署。
jtk和maxkey什么区别
JTK和MaxKey有哪些区别?
在如今这个信息化的时代,越来越多的企业开始依赖于各种软件来支撑运营。在企业内部安全管控方面,基于Java的单点登录(SSO)系统成为了一种很受欢迎的选择,其中JTK和MaxKey就是两个备受关注的SSO解决方案。本文将探讨这两者的区别和各自优势。
1. JTK的特点和优势
JTK是一种基于Java的安全平台,专注于SSO。它的优势主要在于:
安全性高:它的安全性极高,可以实现多重身份验证机制,并提供了多种加密算法,可以有效保护用户的隐私信息。
易于安装和配置:它的部署非常简单,用户可以通过简单的配置文件就能够搭建一个完整的SSO系统。
开放源代码:JTK是开放源代码,可以根据自己的需求进行定制开发。
广泛支持:JTK能够与各种付费和免费的应用程序相互支持,而且还能够与其他SSO解决方案兼容。
2. MaxKey的特点和优势
MaxKey是一种全面的企业级SSO解决方案,它的优势主要在于:
企业级应用集成:MaxKey支持各种SaaS应用程序,可以帮助企业以最佳的方式管理应用集成。
支持多因素身份验证:MaxKey可以实现多重身份验证,保证用户的信息安全。
易于使用:它的管理控制台非常简单易用,可以帮助企业管理员方便地管理系统的各种设置。
模块化系统:MaxKey是一个模块化的系统,可以按照企业自己的需求配置和部署系统。
3. 选择JTK还是MaxKey?
两种解决方案各有所长,那么在选择时应该考虑什么呢?以下是一些需要考虑的因素:
安全性:如果您非常注重安全性,那么JTK可能是一个更好的选择,它提供了多重身份验证和加密算法。
企业级应用集成:如果您需要完整的企业级应用集成支持,那么MaxKey可能更适合您。
易用性:如果您喜欢简单易用的解决方案,那么JTK可能是更好的选择,它提供了快速部署和简单配置的功能。
开放源代码:如果您希望自己对系统进行定制,那么JTK可能更适合您,因为它是一个开放源代码的解决方案。
总结:选择SSO解决方案时,应该根据自己的需求和优先考虑因素做出选择。如果安全性是您的首要关注点,那么JTK可能是一个更好的选择,如果您需要企业级应用集成支持,那么MaxKey可能更适合您。
lldb 小记和std::string的数据结构图源码阅读
在深入理解LLVM和GCC的std::string实现差异时,我们首先从lldb着手,探索其内部工作机制。昨天尝试编译llvm后,今天我们就来研究std::string在lldb中的表现,它与g++的std::string实现有何不同。
从一个简单的测试程序开始,我们对比了用g++和clang++编译的代码。在g++版本中,字符串s使用了短字符串优化(SSO)的存储方式,"hi"存储在_M_local_buf中。SSO旨在节省内存,通过为短字符串预留固定大小的结构,如长度、容量和指向字符串数组的指针,共字节。
对于长字符串,例如scow,存储方式不同。尽管_M_local_buf中没有"this is a sunny day",但通过M p找到的实际字符串地址显示出长字符串的存储策略。这表明在长字符串时,std::string会采用常规的存储方式,即一个指针指向字符串数组。
接下来,我们需要弄清楚如何判断何时使用SSO。在代码中,我们猜测可能通过某些标志位来区分,但实际观察到的operator[]函数表明,M p始终指向字符串数组,不论字符串长度。这就意味着,无论短长,读取指定位置的字符都遵循相同的逻辑。
在libstdc++(g++)和libc++(llvm)的实现上,我们发现两者在数据结构上存在差异。例如,libstdc++的std::string使用字节的union,而libc++则为字节。区分长短字符串的方式在libc++中通过检查容量字段的比特位实现,这依赖于机器的字节序。
附录中,我分享了自己编译LLVM的体验和使用clang++编译程序的CMakeLists.txt设置,供有兴趣的读者参考。
åç¹ç»å½SSOåçåå®ç°
欢è¿å¤§å®¶å ³æ³¨?github.com/hsfxuebao?ï¼å¸æ对大家ææ帮å©ï¼è¦æ¯è§å¾å¯ä»¥çè¯éº»ç¦ç»ç¹ä¸ä¸Starå1. åç³»ç»ç»å½æºå¶1.1 / å?/index.html ?å¦ åæºï¼åè®®ãååã端å£å·ç¸åï¼/ å?/index.html?è·¨å åè®®ä¸åï¼/ å?ç¾åº¦ä¸ä¸ï¼ä½ å°±ç¥é?è·¨å 主ååä¸åï¼test/baiduï¼
/? å /?è·¨å åååä¸åï¼www/blogï¼
:/?å :/?è·¨å 端å£å·ä¸åï¼/ï¼
2.3 å¤ç³»ç»è§£å³æ¹æ¡è½ç¶åç³»ç»çç»å½è§£å³æ¹æ¡å¾å®ç¾ï¼ä½å¯¹äºå¤ç³»ç»åºç¨ç¾¤å·²ç»ä¸åéç¨äºï¼ä¸ºä»ä¹å¢ï¼
åç³»ç»ç»å½è§£å³æ¹æ¡çæ ¸å¿æ¯cookieï¼cookieæºå¸¦ä¼è¯idå¨æµè§å¨ä¸æå¡å¨ä¹é´ç»´æ¤ä¼è¯ç¶æãä½cookieæ¯æéå¶çï¼è¿ä¸ªéå¶å°±æ¯cookieçåï¼é常对åºç½ç«çååï¼ï¼æµè§å¨åéâï¼ç¶åå°å®ä»¬çcookieå设置为âbaidu.comâï¼è¿ç§åæ³ç论ä¸æ¯å¯ä»¥çï¼çè³æ©æå¾å¤å¤ç³»ç»ç»å½å°±éç¨è¿ç§åååå ±äº«cookieçæ¹å¼ãç¶èï¼å¯è¡å¹¶ä¸ä»£è¡¨å¥½ï¼å ±äº«cookieçæ¹å¼åå¨ä¼å¤å±é:
é¦å ï¼åºç¨ç¾¤ååå¾ç»ä¸ï¼
å ¶æ¬¡ï¼åºç¨ç¾¤åç³»ç»ä½¿ç¨çææ¯ï¼è³å°æ¯webæå¡å¨ï¼è¦ç¸åï¼ä¸ç¶cookieçkeyå¼ï¼tomcat为JSESSIONIDï¼ä¸åï¼æ æ³ç»´æä¼è¯ï¼å ±äº«cookieçæ¹å¼æ¯æ æ³å®ç°è·¨è¯è¨ææ¯å¹³å°ç»å½çï¼æ¯å¦javaãphpã.netç³»ç»ä¹é´ï¼
第ä¸ï¼cookieæ¬èº«ä¸å®å ¨ã
å æ¤ï¼æ们éè¦ä¸ç§å ¨æ°çç»å½æ¹å¼æ¥å®ç°å¤ç³»ç»åºç¨ç¾¤çç»å½ï¼è¿å°±æ¯åç¹ç»å½
3. åç¹ç»å½ä»ä¹æ¯åç¹ç»å½ï¼åç¹ç»å½å ¨ç§°Single Sign Onï¼ä»¥ä¸ç®ç§°SSOï¼ï¼æ¯æå¨å¤ç³»ç»åºç¨ç¾¤ä¸ç»å½ä¸ä¸ªç³»ç»ï¼ä¾¿å¯å¨å ¶ä»ææç³»ç»ä¸å¾å°ææèæ éå次ç»å½ï¼å æ¬åç¹ç»å½ä¸åç¹æ³¨é两é¨å
3.1 ç»å½ç¸æ¯äºåç³»ç»ç»å½ï¼ssoéè¦ä¸ä¸ªç¬ç«ç认è¯ä¸å¿ï¼åªæ认è¯ä¸å¿è½æ¥åç¨æ·çç¨æ·åå¯ç çå®å ¨ä¿¡æ¯ï¼å ¶ä»ç³»ç»ä¸æä¾ç»å½å ¥å£ï¼åªæ¥å认è¯ä¸å¿çé´æ¥ææãé´æ¥ææéè¿ä»¤çå®ç°ï¼sso认è¯ä¸å¿éªè¯ç¨æ·çç¨æ·åå¯ç 没é®é¢ï¼å建ææ令çï¼å¨æ¥ä¸æ¥ç跳转è¿ç¨ä¸ï¼ææ令çä½ä¸ºåæ°åéç»å个åç³»ç»ï¼åç³»ç»æ¿å°ä»¤çï¼å³å¾å°äºææï¼å¯ä»¥åæ¤å建å±é¨ä¼è¯ï¼å±é¨ä¼è¯ç»å½æ¹å¼ä¸åç³»ç»çç»å½æ¹å¼ç¸åãè¿ä¸ªè¿ç¨ï¼ä¹å°±æ¯åç¹ç»å½çåçï¼ç¨ä¸å¾è¯´æ
ä¸é¢å¯¹ä¸å¾ç®è¦æè¿°:
ç¨æ·è®¿é®ç³»ç»1çåä¿æ¤èµæºï¼ç³»ç»1åç°ç¨æ·æªç»å½ï¼è·³è½¬è³sso认è¯ä¸å¿ï¼å¹¶å°èªå·±çå°åä½ä¸ºåæ°
sso认è¯ä¸å¿åç°ç¨æ·æªç»å½ï¼å°ç¨æ·å¼å¯¼è³ç»å½é¡µé¢
ç¨æ·è¾å ¥ç¨æ·åå¯ç æ交ç»å½ç³è¯·
sso认è¯ä¸å¿æ ¡éªç¨æ·ä¿¡æ¯ï¼å建ç¨æ·ä¸sso认è¯ä¸å¿ä¹é´çä¼è¯ï¼ç§°ä¸ºå ¨å±ä¼è¯ï¼åæ¶å建ææ令ç
sso认è¯ä¸å¿å¸¦ç令ç跳转ä¼æåç请æ±å°åï¼ç³»ç»1ï¼
ç³»ç»1æ¿å°ä»¤çï¼å»sso认è¯ä¸å¿æ ¡éªä»¤çæ¯å¦ææ
sso认è¯ä¸å¿æ ¡éªä»¤çï¼è¿åææï¼æ³¨åç³»ç»1
ç³»ç»1使ç¨è¯¥ä»¤çå建ä¸ç¨æ·çä¼è¯ï¼ç§°ä¸ºå±é¨ä¼è¯ï¼è¿ååä¿æ¤èµæº
ç¨æ·è®¿é®ç³»ç»2çåä¿æ¤èµæº
ç³»ç»2åç°ç¨æ·æªç»å½ï¼è·³è½¬è³sso认è¯ä¸å¿ï¼å¹¶å°èªå·±çå°åä½ä¸ºåæ°
sso认è¯ä¸å¿åç°ç¨æ·å·²ç»å½ï¼è·³è½¬åç³»ç»2çå°åï¼å¹¶éä¸ä»¤ç
ç³»ç»2æ¿å°ä»¤çï¼å»sso认è¯ä¸å¿æ ¡éªä»¤çæ¯å¦ææ
sso认è¯ä¸å¿æ ¡éªä»¤çï¼è¿åææï¼æ³¨åç³»ç»2
ç³»ç»2使ç¨è¯¥ä»¤çå建ä¸ç¨æ·çå±é¨ä¼è¯ï¼è¿ååä¿æ¤èµæº
ç¨æ·ç»å½æåä¹åï¼ä¼ä¸sso认è¯ä¸å¿åå个åç³»ç»å»ºç«ä¼è¯ï¼ç¨æ·ä¸sso认è¯ä¸å¿å»ºç«çä¼è¯ç§°ä¸ºå ¨å±ä¼è¯ï¼ç¨æ·ä¸å个åç³»ç»å»ºç«çä¼è¯ç§°ä¸ºå±é¨ä¼è¯ï¼å±é¨ä¼è¯å»ºç«ä¹åï¼ç¨æ·è®¿é®åç³»ç»åä¿æ¤èµæºå°ä¸åéè¿sso认è¯ä¸å¿ï¼å ¨å±ä¼è¯ä¸å±é¨ä¼è¯æå¦ä¸çº¦æå ³ç³»:
å±é¨ä¼è¯åå¨ï¼å ¨å±ä¼è¯ä¸å®åå¨
å ¨å±ä¼è¯åå¨ï¼å±é¨ä¼è¯ä¸ä¸å®åå¨
å ¨å±ä¼è¯éæ¯ï¼å±é¨ä¼è¯å¿ é¡»éæ¯
ä½ å¯ä»¥éè¿å客åãç¾åº¦ãcsdnãæ·å®çç½ç«çç»å½è¿ç¨å 深对åç¹ç»å½çç解ï¼æ³¨æè§å¯ç»å½è¿ç¨ä¸ç跳转urlä¸åæ°
3.2 注éåç¹ç»å½èªç¶ä¹è¦åç¹æ³¨éï¼å¨ä¸ä¸ªåç³»ç»ä¸æ³¨éï¼ææåç³»ç»çä¼è¯é½å°è¢«éæ¯ï¼ç¨ä¸é¢çå¾æ¥è¯´æ
sso认è¯ä¸å¿ä¸ç´çå¬å ¨å±ä¼è¯çç¶æï¼ä¸æ¦å ¨å±ä¼è¯éæ¯ï¼çå¬å¨å°éç¥ææ注åç³»ç»æ§è¡æ³¨éæä½
ä¸é¢å¯¹ä¸å¾ç®è¦è¯´æ:
ç¨æ·åç³»ç»1å起注é请æ±
ç³»ç»1æ ¹æ®ç¨æ·ä¸ç³»ç»1建ç«çä¼è¯idæ¿å°ä»¤çï¼åsso认è¯ä¸å¿å起注é请æ±
sso认è¯ä¸å¿æ ¡éªä»¤çææï¼éæ¯å ¨å±ä¼è¯ï¼åæ¶ååºææç¨æ¤ä»¤ç注åçç³»ç»å°å
sso认è¯ä¸å¿åææ注åç³»ç»å起注é请æ±
å注åç³»ç»æ¥æ¶sso认è¯ä¸å¿ç注é请æ±ï¼éæ¯å±é¨ä¼è¯
sso认è¯ä¸å¿å¼å¯¼ç¨æ·è³ç»å½é¡µé¢
4. å®ç°åªæ¯ç®è¦ä»ç»ä¸åºäºjavaçå®ç°è¿ç¨ï¼ä¸æä¾å®æ´æºç ï¼æç½äºåçï¼æç¸ä¿¡ä½ 们å¯ä»¥èªå·±å®ç°ãssoéç¨å®¢æ·ç«¯/æå¡ç«¯æ¶æï¼æ们å çsso-clientä¸sso-serverè¦å®ç°çåè½ï¼ä¸é¢ï¼sso认è¯ä¸å¿=sso-serverï¼
sso-client:
æ¦æªåç³»ç»æªç»å½ç¨æ·è¯·æ±ï¼è·³è½¬è³sso认è¯ä¸å¿
æ¥æ¶å¹¶åå¨sso认è¯ä¸å¿åéç令ç
ä¸sso-serveréä¿¡ï¼æ ¡éªä»¤ççæææ§
建ç«å±é¨ä¼è¯
æ¦æªç¨æ·æ³¨é请æ±ï¼åsso认è¯ä¸å¿åé注é请æ±
æ¥æ¶sso认è¯ä¸å¿ååºç注é请æ±ï¼éæ¯å±é¨ä¼è¯
sso-server:
éªè¯ç¨æ·çç»å½ä¿¡æ¯
åå»ºå ¨å±ä¼è¯
å建ææ令ç
ä¸sso-clientéä¿¡åé令ç
æ ¡éªsso-client令çæææ§
ç³»ç»æ³¨å
æ¥æ¶sso-client注é请æ±ï¼æ³¨éææä¼è¯
æ¥ä¸æ¥ï¼æ们æç §åçæ¥ä¸æ¥æ¥å®ç°ssoå§ï¼
4.1 sso-clientæ¦æªæªç»å½è¯·æ±javaæ¦æªè¯·æ±çæ¹å¼æservletãfilterãlistenerä¸ç§æ¹å¼ï¼æ们éç¨filterãå¨sso-clientä¸æ°å»ºLoginFilter.java类并å®ç°Filteræ¥å£ï¼å¨doFilter()æ¹æ³ä¸å å ¥å¯¹æªç»å½ç¨æ·çæ¦æª
public?void?doFilter(ServletRequest?request,?ServletResponse?response,?FilterChain?chain)?throws?IOException,?ServletException?{ HttpServletRequest?req?=?(HttpServletRequest)?request;HttpServletResponse?res?=?(HttpServletResponse)?response;HttpSession?session?=?req.getSession();if?(session.getAttribute("isLogin"))?{ chain.doFilter(request,?response);return;}//跳转è³sso认è¯ä¸å¿res.sendRedirect("sso-server-url-with-system-url");}4.2 sso-serveræ¦æªæªç»å½è¯·æ±æ¦æªä»sso-client跳转è³sso认è¯ä¸å¿çæªç»å½è¯·æ±ï¼è·³è½¬è³ç»å½é¡µé¢ï¼è¿ä¸ªè¿ç¨ä¸sso-clientå®å ¨ä¸æ ·
4.3 sso-serveréªè¯ç¨æ·ç»å½ä¿¡æ¯ç¨æ·å¨ç»å½é¡µé¢è¾å ¥ç¨æ·åå¯ç ï¼è¯·æ±ç»å½ï¼sso认è¯ä¸å¿æ ¡éªç¨æ·ä¿¡æ¯ï¼æ ¡éªæåï¼å°ä¼è¯ç¶ææ 记为âå·²ç»å½â
@RequestMapping("/login")public?String?login(String?username,?String?password,?HttpServletRequest?req)?{ this.checkLoginInfo(username,?password);req.getSession().setAttribute("isLogin",?true);return?"success";}4.4ãsso-serverå建ææ令çææ令çæ¯ä¸ä¸²éæºå符ï¼ä»¥ä»ä¹æ ·çæ¹å¼çæé½æ²¡æå ³ç³»ï¼åªè¦ä¸éå¤ãä¸æ伪é å³å¯ï¼ä¸é¢æ¯ä¸ä¸ªä¾å
String?token?=?UUID.randomUUID().toString();4.5ãsso-clientåå¾ä»¤çå¹¶æ ¡éªsso认è¯ä¸å¿ç»å½åï¼è·³è½¬ååç³»ç»å¹¶éä¸ä»¤çï¼åç³»ç»ï¼sso-clientï¼åå¾ä»¤çï¼ç¶åå»sso认è¯ä¸å¿æ ¡éªï¼å¨LoginFilter.javaçdoFilter()ä¸æ·»å å è¡
//?请æ±é带tokenåæ°String?token?=?req.getParameter("token");if?(token?!=?null)?{ //?å»sso认è¯ä¸å¿æ ¡éªtokenboolean?verifyResult?=?this.verify("sso-server-verify-url",?token);if?(!verifyResult)?{ res.sendRedirect("sso-server-url");return;}chain.doFilter(request,?response);}verify()æ¹æ³ä½¿ç¨/xuxueli/xxlâ¦Downloadgitee.com/xuxueliâ¦Download5.4 ææ¡£å°å
ä¸æææ¡£
5.5 项ç®ç»æ说æHttpSession?session?=?request.getSession();session.getAttribute("isLogin");.6 åºäºTokenæ¹å¼é¨ç½²ç±äºåå端å离å¼åç模å¼è¾å¤ï¼è¿éåªä»ç»åºäºTokenæ¹å¼é¨ç½²ï¼å¨ä¸äºæ æ³ä½¿ç¨Cookieçåºæ¯ä¸ï¼å¯ä½¿ç¨è¯¥æ¹å¼ï¼å¦éè¦Cookieæ¥çåºäºcookieæ¹å¼é¨ç½²
5.6.1 认è¯ä¸å¿ï¼SSO Serverï¼æ建项ç®åï¼xxl-sso-server
é ç½®æ件ä½ç½®ï¼application.properties
HttpSession?session?=?request.getSession();session.getAttribute("isLogin");.6.2 åç¹ç»éClient端æ建项ç®åï¼xxl-sso-token-sample-springboot
mavenä¾èµ
HttpSession?session?=?request.getSession();session.getAttribute("isLogin");3é ç½®æ件ï¼application.properties
HttpSession?session?=?request.getSession();session.getAttribute("isLogin");4é ç½® XxlSsoTokenFilter
HttpSession?session?=?request.getSession();session.getAttribute("isLogin");.6.3 éªè¯ (模æè¯·æ± Token æ¹å¼æ¥å ¥SSOçæ¥å£)ä¿®æ¹Hostæ件ï¼ååæ¹å¼è®¿é®è®¤è¯ä¸å¿ï¼æ¨¡æè·¨åä¸çº¿ä¸çå®ç¯å¢
HttpSession?session?=?request.getSession();session.getAttribute("isLogin");6åå«è¿è¡ "xxl-sso-server" ä¸ "xxl-sso-token-sample-springboot"
认è¯ä¸å¿æ建æååï¼é»è®¤ä¸ºTokenæ¹å¼ç»éæä¾APIæ¥å£:
1ãç»éæ¥å£ï¼/app/login
codeï¼ è¡¨ç¤ºæåãå ¶ä»å¤±è´¥
msgï¼é误æ示
data: ç»éç¨æ·ç sso sessionid
usernameï¼è´¦å·
passwordï¼è´¦å·
åæ°ï¼POSTåæ°
ååºï¼JSONæ ¼å¼
2ã注éæ¥å£ï¼/app/logout
codeï¼ è¡¨ç¤ºæåãå ¶ä»å¤±è´¥
msgï¼é误æ示
sessionIdï¼ç»éç¨æ·ç sso sessionid
åæ°ï¼POSTåæ°
ååºï¼JSONæ ¼å¼
3ãç»éç¶ææ ¡éªæ¥å£ï¼/app/l