sso 대응 - MainController 로직 이용
This commit is contained in:
@@ -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());
|
||||
}
|
||||
|
||||
/**
|
||||
* 휴대폰번호에서 숫자만 추출
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user