APP下载

xu-sso轻量级单点登入 对人员 专案 许可权的统一管理

消息来源:baojiabao.com 作者: 发布时间:2026-05-15

报价宝综合消息xu-sso轻量级单点登入 对人员 专案 许可权的统一管理

xu-sso

专案介绍

xu-sso是一个轻量级的统一认证许可权管理平台,其核心目的是帮助开发者快速建立一套统一的认证许可权平台, 以最简单的方式进行接入,低侵入,低耦合。 支援界面许可权拦截,目前仅限于基于web页面的界面,前后端分离的界面,因为当前token的储存依赖于cookie。 新版本支援head。

专案功能

单点登入人员管理部门管理专案管理角色管理许可权管理api界面1.2.2版本更新

优化redis工具

修复有可能redis频繁建立连线,释放资源导致的问题

新增redis哨兵模式支援,现支援单机,哨兵,丛集模式

如果是哨兵模式,请新增配置引数:masterID

com.xu.sso.redis.masterId=mymaster

1.2.1版本更新

支援ant过滤规则

WildcardDescription?匹配任意单字元*匹配0或者任意数量的字元,不包含/**匹配0或者更多数量的目录,不包含/

PathDescription/app/p?ttern匹配(Matches) /app/pattern 和 /app/pXttern,但是不包括/app/pttern/**/example匹配专案根路径下 /project/example, /project/foow/example, /example..../app/delete*匹配(Matches) /app/deleteUser, /app/deleteApp....

需要注意的是,路径匹配遵循最长匹配原则(has more characters),例如/app/dir/file.jsp符合/**/.jsp和/app/dir/.jsp两个路径模式,那么最终就是根据后者来匹配。

1.2.0版本更新

新增界面登入登出,client支援head,允许请求时将token放入head,head名与cookie一致,都为token

界面登入:http://localhost:8282/api/login

请求引数:

{

"appId":"",

"username":"",

"password":""

}

响应引数:

{

"code":"Success",

"msg":"成功",

"token":"91be1d5d818943c0b50bd368284bc01e"

}

界面登出:http://localhost:8282/api/logout

请求引数:

{

"token":"91be1d5d818943c0b50bd368284bc01e"

}

响应引数:

{

"code": "Success",

"msg": "成功"

}

安装教程

执行sql建表,在初始化资讯中,会初始化admin使用者,建议初始化时新增自己的邮箱账户, 在重置密码的时候需要传送邮件,建议改成自己的账户(此系统中无admin超级管理员一说), 所有的角色许可权都是根据不同专案独立的app-sso-server专案为认证服务,配置application-dev.properties档案新增redis配置,建议使用redis丛集, 多个地址以","分隔,若使用了redis丛集, 分别将app-sso-server和app-sso-web专案中的RedisUtil替换成RedisClusterUtil, 将sso-client中的ClientRedisUtil替换成ClientRedisClusterUtil,重新打包新增公司邮箱字尾,用于注册时验证,非公司邮件无法在登入也注册,拥有许可权的使用者可在 app-sso-web后台新增使用者,此入口新增的使用者不会限制公司邮箱通知邮箱配置,用于传送注册资讯,重置密码资讯,若不配置,则无法获取注册密码,重置密码新增资料来源配置app-sso-web专案为后台管理专案,对人员专案许可权等的统一管理,配置properties档案 1,2,3,4步骤同server服务配置 5. 新增sso认证服务器配置 com.xu.sso.service.path=http://localhost:8180 app-sso-server的地址

com.xu.sso.logout.path=/logout 使用者登出路径,接入的应用中不需要有此实现,只需要在页面中添加注销按钮,将登出路径配置在此就行

com.xu.sso.app_id=app-sso-web 当前接入应用的AppID,此ID需在sso-web后台注册时保持一致,一旦注册后不可更改

com.xu.sso.interval=0 应用许可权更新间隔,单位:毫秒,-1为不更新

所有配置完成后,使用mvn命令进行打包,部署到服务器上

接入说明(请先将client包上传至公司maven私服,方便接入)

如果是前后端分离模式接入,或者有用到ajax请求的,在前端需新增全域性ajax设定,用于登入跳转和许可权拦截提示client中拦截请求,判断是否为ajax请求的,是通过header里的"X-Requested-With"引数值为"XMLHttpRequest", 目前测试jQuery中能正常判断,若使用的是前端框架的,在接入中无法判断出ajax请求的,请在前端发起请求前加入此引数, 可作为ajax的全域性请求引数前后端分离模式中,在登入成功,跳转到配置的页面时,前端需从url中获取token,放入cookie中, cookie名为token // jquery ajax 登入跳转,许可权拦截弹框示例

$.ajaxSetup({

error: function(xhr,status,error) {

if (401 == xhr.status) {

window.location.href = xhr.responseText;

} else if (403 == xhr.status) {

// 可使用自定义弹框提示

layer.alert(xhr.responseText, {icon: 5});

}

}

});

登入许可权接入方式

pom引入client依赖

com.xu.sso

sso-client

最新版本

新增 properties引数

# sso服务器地址

com.xu.sso.service.path =

# 当前专案的使用者登出路径(此功能后端无需提供,只需前端和前端登出按钮请求路径一致)

com.xu.sso.logout.path = /logout

# 当前专案id

com.xu.sso.app_id =

# 专案许可权重新整理时间(毫秒),-1为不重新整理

com.xu.sso.interval = 0

# redis

com.xu.sso.redis.host =

com.xu.sso.redis.password =

com.xu.sso.redis.database =

# 如果是哨兵模式,请填写masterID,预设为mymaster

com.xu.sso.redis.masterId=mymaster

新增filter配置

spring boot 不需要主动设定filter,只需要新增spring扫描路径,在Application启动类上新增扫描路径

@ComponentScan(basePackages = {"com.xu.sso"})

spring 专案

新增包扫描路径:

新增web.xml里filter配置,loginFilter必须排在powerFilter之前

loginFilter

org.springframework.web.filter.DelegatingFilterProxy

loginFilter

/*

powerFilter

org.springframework.web.filter.DelegatingFilterProxy

powerFilter

/*

最后,在认证平台后台管理系统里注册下应用

在后台建立专案的人员,会自动成为专案负责人许可权,专案负责人许可权可转移,最多可新增3人

接入完成后,在专案中使用时,若需要获取当前登入使用者资讯,Java后端可使用

UserLoginInfo userLoginInfo = LoginFilter.threadLocal.get();

// 或者通过request获取

UserLoginInfo userLoginInfo = (UserLoginInfo)request.getAttribute(SSOConfig.SSO_USER);

登入后会将使用者资讯放入到threadLocal跟request中,在页面中,可通过request获取使用者资讯

API获取使用者和角色资讯接入

pom引入client依赖

com.xu.sso

sso-client-api

最新版本

新增 properties引数

# sso服务器地址

com.xu.sso.service.path =

# 当前专案的appId

com.xu.sso.app_id =

# key从sso管理后台,通过api授权获取

com.xu.sso.key =

使用方式

直接在专案中通过spring注入

@Autowired

private OpenApiService openApiService;

所有界面:

/**

* 查询所有使用者列表

*

* @return

*/

List findAllUser();

/**

* 通过username列表查询对应使用者列表

*

* @param usernames

* @return

*/

List findUserInList(List usernames);

/**

* 模糊查询

*

* @param username

* @return

*/

List findUserByLikeName(String username);

/**

* 查询使用者

*

* @param username

* @return

*/

OpenUserInfo findUserByName(String username);

/**

* 查询使用者所拥有的角色

* @param username

* @return

*/

List findUserRoles(String username);

使用说明

1.新应用注册

在应用管理中,新增新应用,所填写的APP ID必须和专案中配置的一致,AppID一旦建立后不能更改。 访问许可权:公共专案允许所有登入使用者直接访问,私有专案需要登入使用者授权才能访问。服务型别: 当前版本无太大影响,在首页应用导航中,只有web专案才会展示。在专案新建的时候,会预设新增 当前建立人为专案负责人许可权,此许可权仅限在sso-web后台对此专案的操作许可权,比如新增专案角色, 新增专案许可权等,跟专案访问中所需要的角色许可权无关。负责人许可权可转移,最多可新增3人

2.应用角色维护

各专案的角色互相独立,角色的建立仅是一个身份标识,需要对限制的界面新增角色限制并生效后,只有 拥有该角色的使用者才允许进行访问

3.应用许可权维护

界面许可权分为:是否登入,角色限制只针对需要登入验证的接口才生效 对需要进行身份限制的界面服务新增角色,只有拥有该角色的使用者才允许访问,新增完后需要重新整理快取生效

4.使用者授权

如果是私有专案,使用者想要访问该应用,先需要新增该使用者授权,私有应用只允许授权的使用者进行访问, 公有应用,使用者只需要登入就能进行访问。对使用者进行角色授权,可新增对应的角色,也可以提升使用者为 该专案的负责人许可权

5.开放api授权

用于api接入,来获取使用者和角色的资讯,api的接入适用于想要自定义角色许可权的应用,只接入sso的登入, 不接入许可权,并通过api来获取使用者进行自定义的许可权拦截

6.人员管理

管理公司所有人员,可重置使用者密码,重置密码是传送邮件,所以必须配置发件邮箱,若使用者离职或需要删除 此使用者,在此处可登出使用者,该使用者则被删除,无法登陆任何应用

2020-01-17 03:49:00

相关文章