概述所谓单点登录(SingleSignOn),简称SSO,是指在多个应用系统中,用户只需登录一次即可访问所有相互信任的应用系统。任何系统访问SSO之前需要完成两个步骤。1、主数据同步:这些主数据包括组织机构、账户、权限信息等,从外部系统(可以是MDM、OA、HR等)同步系统需要的数据。2、实现SSO跳转页面:门户系统会将token传递给当前系统,当前系统需要读取token中的内容,才能完成本系统的账号认证操作。组织与账号同步单点登录前,首先要保证组织节点、账号等信息已经同步到系统中。同步机构和账号的方式有很多,这里不再赘述。TokenReaderSSO对接工作的核心是读取令牌(Token)值,并转换为本系统的userId。Foxnic-Web大大简化了SSO的集成,只需要实现一个TokenReader,如下代码所示。导入com.github.foxnic.api.transter.Result;导入org.github.foxnic.web.domain.oauth.User;导入org.github.foxnic.web.framework.sso.TokenReader;导入org.github.foxnic。web.language.Language;importorg.github.foxnic.web.proxy.oauth.UserServiceProxy;importorg.springframework.stereotype.Component;importjavax.servlet.http.HttpServletRequest;@ComponentpublicclassFoxnicTokenReaderextendsTokenReader{/***从请求中读取账户**/@OverridepublicStringreadUserId(HttpServletRequestrequest){//读取令牌Stringaccount=request.getParameter("account");//将读取的令牌转换为userIdResultuserResult=UserServiceProxy.api().getByAccount(account);如果(userResult.failure())返回空;如果(userResult.data()==null)返回null;//最后返回userIdreturnuserResult.data().getId();}/***从请求中读取用户指定的语言**/@OverridepublicLanguagereadLanguage(HttpServletRequestrequest){returnLanguage.zh_cn;系统配置TokenReader定义完成后,需要在yml文件的security.token-resders中指定。可以指定一个或多个。如果指定多个,则按顺序指定调用如下图:SSO重定向在Foxnic-Web中,sso重定向也是/sso-login.html。不同的场景可以指定不同的参数值:格式:响应方式,可选值包括:html/json。html一般用在pc端。登录后会自动跳转到指定页面。json方式主要用于移动端等非网页场合。redirect:指定登录后的重定向页面,格式为html时有效,默认为/index.html注销拦截如果当前系统集成了单点登录,则需要在系统注销后跳转到或者当session过期时是Portal自己的登录页面,不是当前系统的登录页面。这时需要在系统管理下的系统参数中设置两个参数:system.external.portal.enable:启用该参数表示当前系统与外部Portal系统集成。system.external.portal.loginURL:启用system.external.portal.enable参数时,指定外部门户的登录页面URL。登录身份标识登录身份和优先级的定义其实是常规登录(non-SSO)中的一个概念。用户在登录界面的输入框输入的时候,可能会输入一个账号,也可能会输入手机号、邮箱、工号等。总之,从技术角度来说,账号的字段表本身或与帐户表关联的任何表都可以用于标识,只要它是唯一的即可。那么如何保证正确识别呢?Foxnic-Web使用身份优先级配置功能。Foxnic-Web常规登录目前支持账号ID、账号名、手机号、工号,这四种类型在支持的类型中定义在LoginIdentityType枚举类型中。为了避免标识冲突,需要在尝试时指定它们的优先级。YML文件如下:其中账号ID为最高优先级不可修改,其他登录ID可通过YML文件调整识别优先级。相关项目https://gitee.com/LeeFJ/foxnichttps://gitee.com/LeeFJ/foxnic-webhttps://gitee.com/lank/eam