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





























