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依赖 <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 = # 当前项目的appId com.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.人员管理
管理公司所有人员,可重置用户密码,重置密码是发送邮件,所以必须配置发件邮箱,若用户离职或需要删除 此用户,在此处可注销用户,该用户则被删除,无法登陆任何应用


还没有评论,来说两句吧...