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) { 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.DataSourceType;
import com.eactive.eai.rms.common.datasource.DataSourceTypeManager; import com.eactive.eai.rms.common.datasource.DataSourceTypeManager;
import com.eactive.eai.rms.common.interceptor.InterceptorSkipController; import com.eactive.eai.rms.common.interceptor.InterceptorSkipController;
import com.eactive.eai.rms.common.login.LoginVo; import com.eactive.eai.rms.common.login.MainController;
import com.eactive.eai.rms.common.login.SessionManager;
import com.eactive.eai.rms.common.util.CommonConstants; 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.monitoringProperty.service.MonitoringPropertyService;
import com.eactive.eai.rms.data.entity.man.user.UserInfoService; import com.eactive.eai.rms.data.entity.man.user.UserInfoService;
import com.eactive.eai.rms.data.entity.man.user.UserRole; 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.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSession;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Optional; import java.util.Optional;
import java.util.Properties; import java.util.Properties;
import java.util.stream.Collectors;
@Slf4j @Slf4j
@Controller @Controller
@@ -47,12 +42,14 @@ public class SsoController implements InterceptorSkipController {
private final UserRoleService userRoleService; private final UserRoleService userRoleService;
private final UserServiceTypeService userServiceTypeService; private final UserServiceTypeService userServiceTypeService;
private final MonitoringContext monitoringContext; private final MonitoringContext monitoringContext;
private final MainController mainController;
public SsoController(MonitoringPropertyService monitoringPropertyService, public SsoController(MonitoringPropertyService monitoringPropertyService,
UserInfoService userInfoService, UserInfoService userInfoService,
UserRoleService userRoleService, UserRoleService userRoleService,
UserServiceTypeService userServiceTypeService, UserServiceTypeService userServiceTypeService,
MonitoringContext monitoringContext) { MonitoringContext monitoringContext,
MainController mainController) {
KjbPropertyInjector kjbPropertyInjector = new KjbPropertyInjector(monitoringPropertyService, PROP_GORUP_ID); KjbPropertyInjector kjbPropertyInjector = new KjbPropertyInjector(monitoringPropertyService, PROP_GORUP_ID);
prop = kjbPropertyInjector.inject(new KjbProperty()); prop = kjbPropertyInjector.inject(new KjbProperty());
this.ssoModule = KjbSsoModule.getInstance(prop); this.ssoModule = KjbSsoModule.getInstance(prop);
@@ -60,6 +57,7 @@ public class SsoController implements InterceptorSkipController {
this.userRoleService = userRoleService; this.userRoleService = userRoleService;
this.userServiceTypeService = userServiceTypeService; this.userServiceTypeService = userServiceTypeService;
this.monitoringContext = monitoringContext; this.monitoringContext = monitoringContext;
this.mainController = mainController;
} }
@RequestMapping(value = "/sso/login.do") @RequestMapping(value = "/sso/login.do")
@@ -138,11 +136,9 @@ public class SsoController implements InterceptorSkipController {
// 사용자 생성 또는 업데이트 // 사용자 생성 또는 업데이트
UserInfo userInfo = findOrCreateUser(info, extendedInfo); UserInfo userInfo = findOrCreateUser(info, extendedInfo);
// 로그인 세션 설정 // 로그인 세션 설정 (MainController 위임)
setupLoginSession(req, userInfo);
log.info("SSO 로그인 성공 - userId: {}", userId); 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; 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());
}
/** /**
* 휴대폰번호에서 숫자만 추출 * 휴대폰번호에서 숫자만 추출
*/ */