728x90
<요구사항>
A사이트에서 로그인을 하고 A사이트에서 특정 버튼/메뉴 클릭 시, B사이트 (메인)페이지로 이동(B사이트 자동 로그인)
<구현방법>
1. A사이트에서 B사이트 호출() 시 헤더에 특정 name으로 userId를 담아 보냄
2. B사이트에서 헤더 name을 확인하고 value(userId)를 B사이트 DB에서 조회
3. DB 조회 후 userId가 존재한다면 로그인 처리 후 메인화면으로 이동
없다면 얼롯창 안내 후 B사이트 로그인 페이지로 이동
<유의사항>
1. B사이트 호출 URL 지정(약속)해야 함
2. 호출 시 헤더 name 지정(약속)해야 함
3. dispatcher-servlet.xml에서 호출 URL 세션 및 로그인 예외 처리
<구현>
1. A사이트에서 B사이트 요청 jsp 스크립트
<script>
// 사이트로 요청을 보냄
fetch('http://localhost:8080//login/ssoLogin.do', {
method: 'GET',
headers: {
'ssoId': 'ssollacc' // B사이트 DB에 있는 아이디
}
})
.then(response => {
// 응답 처리
if (response.ok) {
// 응답이 성공적인 경우 (200-299 범위의 상태 코드)
// 사이트로 로그인이 성공했으며, main 페이지로 이동하거나 응답에 따른 처리를 수행.
window.location.href = 'http://localhost:8080/main/main.do'; // main 페이지로 이동
} else {
// 응답이 실패한 경우 (300 이상 또는 에러 상태 코드)
// 실패 처리 수행.
console.error('사이트 요청에 실패했습니다.');
}
})
.catch(error => {
// 네트워크 오류 등의 예외 처리
console.error('요청 중 오류가 발생했습니다.', error);
});
</script>
2. B사이트에서 요청 받음, java 단에서 처리
@RequestMapping(value = "ssoLogin", method = RequestMethod.GET)
public String ssoLogin(HttpServletRequest request, HttpServletResponse response, Model model) {
logger.debug("request.getHeader>>>>>> (){}", request.getHeader("ssoId"));
String url ="/common/error404"; //에러 페이지
if(!request.getHeader("ssoId").isEmpty()){ //헤더에 약속한 name이 있는가?
url ="redirect:/login/checkLogin.do"; //있다면 기존 로그인 로직 태움
}
return url;
}
+ 기존 로그인 로직에 분기 추가
if(!StringUtils.isEmpty(request.getHeader("ssoid"))){
userId = request.getHeader("ssoid");
ssoYn = "Y";
logger.debug("ssoid ssoid ssoid userId?>>>>>> ()"+userId);
}
728x90
댓글