diff --git a/src/main/java/com/eactive/eai/rms/common/login/MainController.java b/src/main/java/com/eactive/eai/rms/common/login/MainController.java index f9cac15..f0ab176 100644 --- a/src/main/java/com/eactive/eai/rms/common/login/MainController.java +++ b/src/main/java/com/eactive/eai/rms/common/login/MainController.java @@ -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) { diff --git a/src/main/java/com/eactive/eai/rms/ext/kjb/sso/SsoController.java b/src/main/java/com/eactive/eai/rms/ext/kjb/sso/SsoController.java index 594d1bb..fc80538 100644 --- a/src/main/java/com/eactive/eai/rms/ext/kjb/sso/SsoController.java +++ b/src/main/java/com/eactive/eai/rms/ext/kjb/sso/SsoController.java @@ -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 userRoles = userRoleService.findByUserId(userInfo.getUserid()); - List 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()); - } - /** * 휴대폰번호에서 숫자만 추출 */