提交 231cc987 authored 作者: husishuai's avatar husishuai

init

上级 5b198ff5
...@@ -6,6 +6,8 @@ package com.atlassian.jira.security.sso; ...@@ -6,6 +6,8 @@ package com.atlassian.jira.security.sso;
* @createTime 2024年02月22日 * @createTime 2024年02月22日
*/ */
import cn.hutool.cache.CacheUtil;
import cn.hutool.cache.impl.TimedCache;
import cn.hutool.core.text.CharSequenceUtil; import cn.hutool.core.text.CharSequenceUtil;
import cn.hutool.http.HttpRequest; import cn.hutool.http.HttpRequest;
import cn.hutool.http.HttpResponse; import cn.hutool.http.HttpResponse;
...@@ -46,9 +48,9 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator { ...@@ -46,9 +48,9 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator {
private static final String BASE_URL = "http://192.168.1.113:8080/rest/api/2"; private static final String BASE_URL = "http://192.168.1.113:8080/rest/api/2";
private static final String AUTHORIZATION_HEADER = "Basic cm9vdDpBZG1pbkAxMjM="; // Replace with your base64 encoded auth header private static final String AUTHORIZATION_HEADER = "Basic cm9vdDpBZG1pbkAxMjM="; // Replace with your base64 encoded auth header
private static final Logger log = LoggerFactory.getLogger(SSOSeraphAuthenticator.class); private static final TimedCache<Object, Object> GROUP_NAME_CACHE = CacheUtil.newTimedCache(120000);
private static final HashMap<String, Object> localGroupCache = new HashMap<>(); private static final Logger log = LoggerFactory.getLogger(SSOSeraphAuthenticator.class);
private EventPublisher eventPublisher; private EventPublisher eventPublisher;
//private UserAccessor userAccessor; //private UserAccessor userAccessor;
...@@ -76,16 +78,15 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator { ...@@ -76,16 +78,15 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator {
// } // }
// 3. 判断:用户是否走了登录页进行登录(保证原有登录页可以正常登录)
// 如果是空,则表示未走登录页。那么从auap中获取用户名称
if (CharSequenceUtil.isBlank(username) && CharSequenceUtil.isBlank(password)) {
// 3.1 获取:用户、组信息
HashMap<String, Object> auapUserInfo = new HashMap<>(); HashMap<String, Object> auapUserInfo = new HashMap<>();
auapUserInfo.put("username", "zhangsan"); auapUserInfo.put("username", "zhangsan");
auapUserInfo.put("staTruename", "张三"); auapUserInfo.put("staTruename", "张三");
auapUserInfo.put("deptId", "1813"); auapUserInfo.put("deptId", "1813");
// jira-software-usersping
auapUserInfo.put("deptName", "分公司一-七组"); auapUserInfo.put("deptName", "分公司一-七组");
// 3. 判断:用户是否走了登录页进行登录
// 如果是空,则表示未走登录页。那么从auap中获取用户名称
if (CharSequenceUtil.isBlank(username) && CharSequenceUtil.isBlank(password)) {
// auap账号名称 // auap账号名称
username = auapUserInfo.get("username").toString(); username = auapUserInfo.get("username").toString();
// 昵称 // 昵称
...@@ -97,34 +98,31 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator { ...@@ -97,34 +98,31 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator {
// 创建组名称 // 创建组名称
String groupName = deptName + "-" + deptId; String groupName = deptName + "-" + deptId;
try {
// 3.2 查询用户是否存在(不存在则创建)
// 获取用户对象 // 获取用户对象
Principal user = this.getUser(username); Principal user = this.getUser(username);
try {
// 如果用户不存在,则创建用户 // 如果用户不存在,则创建用户
if (ObjectUtils.isEmpty(user)) { if (ObjectUtils.isEmpty(user)) {
// 判断缓存中是否存在用户组 System.out.println("系统中不存在用户 = " + username);
// if (localGroupCache.containsKey(groupName)) { // 3.3 判断是否存在组
//
// }else {
//
// }
// 判断是否存在组
GroupManager groupManager = ComponentAccessor.getGroupManager(); GroupManager groupManager = ComponentAccessor.getGroupManager();
// 判断缓存中是否存在用户组
if (!GROUP_NAME_CACHE.containsKey(groupName)) {
System.out.println("缓存中不存在组 = " + groupName);
boolean groupExists = groupManager.groupExists(groupName); boolean groupExists = groupManager.groupExists(groupName);
System.out.println("groupExists before = " + groupExists); // 不存在则创建组
// 不存在则创建
if (!groupExists) { if (!groupExists) {
System.out.println("系统中不存在组 = " + groupName);
groupManager.createGroup(groupName); groupManager.createGroup(groupName);
System.out.println("groupExists after = " + groupManager.groupExists(groupName)); // 给组授予应用程序访问权,否则无法登陆(调用rest api实现)
// 给组授予应用程序访问权
addGroupApplicationRole(groupName); addGroupApplicationRole(groupName);
// 给组授权
// PermissionManager permissionManager = ComponentAccessor.getPermissionManager();
// Collection<ProjectPermission> allProjectPermissions = permissionManager.getAllProjectPermissions();
} }
// 将组添加至缓存
GROUP_NAME_CACHE.put(groupName, groupName);
}
// 新增用户 // 新增用户
UserManager userManager = getUserManager(); UserManager userManager = getUserManager();
UserDetails userDetails = new UserDetails(username, userFullName).withPassword("123456").withEmail(username + "@test.com"); UserDetails userDetails = new UserDetails(username, userFullName).withPassword("123456").withEmail(username + "@test.com");
...@@ -387,7 +385,7 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator { ...@@ -387,7 +385,7 @@ public class SSOSeraphAuthenticator extends DefaultAuthenticator {
* 给组添加应用权限 * 给组添加应用权限
*/ */
private void addGroupApplicationRole(String groupName) { private void addGroupApplicationRole(String groupName) {
// 获取应用程序授权纤细 // 获取应用程序授权信息
HashMap<String, List<String>> applicationRole = getApplicationRole(); HashMap<String, List<String>> applicationRole = getApplicationRole();
System.out.println("addGroupApplicationRole - applicationRole: " + applicationRole); System.out.println("addGroupApplicationRole - applicationRole: " + applicationRole);
List<String> groups = applicationRole.get("groups"); List<String> groups = applicationRole.get("groups");
......
Markdown 格式
0%
您添加了 0 到此讨论。请谨慎行事。
请先完成此评论的编辑!
注册 或者 后发表评论