sso 대응 - MainController 로직 이용

This commit is contained in:
Rinjae
2026-01-13 22:19:58 +09:00
parent 6e17ec76ab
commit 80293ff45e
2 changed files with 31 additions and 54 deletions
@@ -120,6 +120,30 @@ public class MainController implements InterceptorSkipController {
}
/**
* SSO 로그인용 세션 설정 (SsoController에서 호출)
* 비밀번호 인증 없이 UserInfo만으로 로그인 처리
*/
public String setupSsoLoginSession(HttpServletRequest request, UserInfo userInfo) {
HttpSession session = request.getSession(true);
try {
initializeLoginAndSetDashboardImage(session);
LoginVo dto = new LoginVo();
dto.setUserId(userInfo.getUserid());
session.setAttribute("userId", userInfo.getUserid());
session.setAttribute("dualLogin", "N");
SessionManager.forceRegisterUserSession(request, dto);
session.setAttribute(CommonConstants.LOGIN, dto);
return loadUserInfoAndSetupSession(request, session, dto, userInfo);
} catch (Exception e) {
return handleExceptionsAndRedirect(request, session, e);
}
}
// 초기 설정 및 대시보드 이미지 설정
private void initializeLoginAndSetDashboardImage(HttpSession session) {
@@ -6,10 +6,8 @@ import com.eactive.eai.rms.common.context.MonitoringContext;
import com.eactive.eai.rms.common.datasource.DataSourceType;
import com.eactive.eai.rms.common.datasource.DataSourceTypeManager;
import com.eactive.eai.rms.common.interceptor.InterceptorSkipController;
import com.eactive.eai.rms.common.login.LoginVo;
import com.eactive.eai.rms.common.login.SessionManager;
import com.eactive.eai.rms.common.login.MainController;
import com.eactive.eai.rms.common.util.CommonConstants;
import com.eactive.eai.rms.common.util.IpUtil;
import com.eactive.eai.rms.data.entity.man.monitoringProperty.service.MonitoringPropertyService;
import com.eactive.eai.rms.data.entity.man.user.UserInfoService;
import com.eactive.eai.rms.data.entity.man.user.UserRole;
@@ -30,11 +28,8 @@ import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional;
import java.util.Properties;
import java.util.stream.Collectors;
@Slf4j
@Controller
@@ -47,12 +42,14 @@ public class SsoController implements InterceptorSkipController {
private final UserRoleService userRoleService;
private final UserServiceTypeService userServiceTypeService;
private final MonitoringContext monitoringContext;
private final MainController mainController;
public SsoController(MonitoringPropertyService monitoringPropertyService,
UserInfoService userInfoService,
UserRoleService userRoleService,
UserServiceTypeService userServiceTypeService,
MonitoringContext monitoringContext) {
MonitoringContext monitoringContext,
MainController mainController) {
KjbPropertyInjector kjbPropertyInjector = new KjbPropertyInjector(monitoringPropertyService, PROP_GORUP_ID);
prop = kjbPropertyInjector.inject(new KjbProperty());
this.ssoModule = KjbSsoModule.getInstance(prop);
@@ -60,6 +57,7 @@ public class SsoController implements InterceptorSkipController {
this.userRoleService = userRoleService;
this.userServiceTypeService = userServiceTypeService;
this.monitoringContext = monitoringContext;
this.mainController = mainController;
}
@RequestMapping(value = "/sso/login.do")
@@ -138,11 +136,9 @@ public class SsoController implements InterceptorSkipController {
// 사용자 생성 또는 업데이트
UserInfo userInfo = findOrCreateUser(info, extendedInfo);
// 로그인 세션 설정
setupLoginSession(req, userInfo);
// 로그인 세션 설정 (MainController 위임)
log.info("SSO 로그인 성공 - userId: {}", userId);
return "redirect:/main.do";
return mainController.setupSsoLoginSession(req, userInfo);
}
}
@@ -277,49 +273,6 @@ public class SsoController implements InterceptorSkipController {
return userInfo;
}
/**
* 로그인 세션 설정
*/
private void setupLoginSession(HttpServletRequest request, UserInfo userInfo) {
HttpSession session = request.getSession(true);
LoginVo dto = new LoginVo();
dto.setUserId(userInfo.getUserid());
dto.setUserName(userInfo.getUsername());
dto.setDepartment(userInfo.getDvsnname());
// 역할 설정
List<UserRole> userRoles = userRoleService.findByUserId(userInfo.getUserid());
List<String> roles = userRoles.stream()
.map(r -> r.getId().getRoleId())
.collect(Collectors.toList());
dto.setRoleList(roles);
// 서비스타입 설정 (검증 없이 전체 허용)
dto.setUseServiceTypes(CommonConstants.USER_SERVICETYPE_NO_CHECK);
// 세션 등록
SessionManager.forceRegisterUserSession(request, dto);
session.setAttribute(CommonConstants.LOGIN, dto);
session.setAttribute("userId", userInfo.getUserid());
session.setAttribute("dualLogin", "N");
// 대시보드 타이틀 설정
String newTitle = monitoringContext.getStringProperty(
MonitoringContext.NEW_DASHBOARD_TITLE, "topLogo.gif");
session.setAttribute(MonitoringContext.NEW_DASHBOARD_TITLE, newTitle);
// 마지막 로그인 정보 업데이트
userInfo.setLastloginyms(LocalDateTime.now());
userInfo.setLastloginip(IpUtil.getClientIp(request));
userInfoService.save(userInfo);
// 세션에 마지막 로그인 정보 저장
session.setAttribute("LastLoginYms", userInfo.getLastloginyms()
.format(com.eactive.eai.data.converter.LocalDateTimeFormatters.FORMATTER_YYYYMMDDHHMMSS_14));
session.setAttribute("LastLoginIp", userInfo.getLastloginip());
}
/**
* 휴대폰번호에서 숫자만 추출
*/