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依赖 <dependency> <groupId>com.xu.sso</groupId> <artifactId>sso-client</artifactId> <version>最新版本</version> </dependency> 添加 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 项目添加包扫描路径:<context:component-scan base-package=\"大众com.xu.sso\公众 />添加web.xml里filter配置,loginFilter必须排在powerFilter之前<filter> <filter-name>loginFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping> <filter-name>loginFilter</filter-name> <url-pattern>/</url-pattern></filter-mapping><!-- 若不须要权限管理,可不添加 --><filter> <filter-name>powerFilter</filter-name> <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class></filter><filter-mapping> <filter-name>powerFilter</filter-name> <url-pattern>/</url-pattern></filter-mapping>末了,在认证平台后台管理系统里注册下运用在后台创建项目的职员,会自动成为项目卖力人权限,项目卖力人权限可转移,最多可添加3人
接入完成后,在项目中利用时,若须要获取当前登任命户信息,Java后端可利用
UserLoginInfo userLoginInfo = LoginFilter.threadLocal.get();// 或者通过request获取UserLoginInfo userLoginInfo = (UserLoginInfo)request.getAttribute(SSOConfig.SSO_USER);
登录后会将用户信息放入到threadLocal跟request中,在页面中,可通过request获取用户信息
API获取用户和角色信息接入
pom引入client依赖 <dependency> <groupId>com.xu.sso</groupId> <artifactId>sso-client-api</artifactId> <version>最新版本</version> </dependency> 添加 properties参数# sso做事器地址com.xu.sso.service.path = # 当前项目的appIdcom.xu.sso.app_id = # key从sso管理后台,通过api授权获取com.xu.sso.key =
利用办法
直接在项目中通过spring注入 @Autowired private OpenApiService openApiService;所有接口: / 查询所有用户列表 @return / List<OpenUserInfo> findAllUser(); / 通过username列表查询对运用户列表 @param usernames @return / List<OpenUserInfo> findUserInList(List<String> usernames); / 模糊查询 @param username @return / List<OpenUserInfo> findUserByLikeName(String username); / 查询用户 @param username @return / OpenUserInfo findUserByName(String username); / 查询用户所拥有的角色 @param username @return / List<OpenUserRole> findUserRoles(String username);
利用解释
1.新运用注册
在运用管理中,添加新运用,所填写的APP ID必须和项目中配置的同等,AppID一旦创建后不能变动。 访问权限:公共项目许可所有登任命户直接访问,私有项目须要登任命户授权才能访问。做事类型: 当前版本无太大影响,在首页运用导航中,只有web项目才会展示。在项目新建的时候,会默认添加 当前创建人为项目卖力人权限,此权限仅限在sso-web后台对此项目的操作权限,比如添加项目角色, 添加项目权限等,跟项目访问中所须要的角色权限无关。卖力人权限可转移,最多可添加3人
2.运用角色掩护
各项目的角色相互独立,角色的创建仅是一个身份标识,须要对限定的接口添加角色限定并生效后,只有 拥有该角色的用户才许可进行访问
3.运用权限掩护
接口权限分为:是否登录,角色限定只针对须要登录验证的接口才生效 对须要进行身份限定的接口做事添加角色,只有拥有该角色的用户才许可访问,添加完后须要刷新缓存生效
4.用户授权
如果是私有项目,用户想要访问该运用,先须要添加该用户授权,私有运用只许可授权的用户进行访问, 公有运用,用户只须要登录就能进行访问。对用户进行角色授权,可添加对应的角色,也可以提升用户为 该项目的卖力人权限
5.开放api授权
用于api接入,来获取用户和角色的信息,api的接入适用于想要自定义角色权限的运用,只接入sso的登录, 不接入权限,并通过api来获取用户进行自定义的权限拦截
6.职员管理
管理公司所有职员,可重置用户密码,重置密码是发送邮件,以是必须配置发件邮箱,若用户离职或须要删除 此用户,在此处可注销用户,该用户则被删除,无法上岸任何运用