LoginController.java 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. package com.lemon.lifecenter.controller;
  2. import java.util.HashMap;
  3. import javax.servlet.http.HttpServletRequest;
  4. import javax.servlet.http.HttpServletResponse;
  5. import org.json.JSONObject;
  6. import org.slf4j.Logger;
  7. import org.slf4j.LoggerFactory;
  8. import org.springframework.beans.factory.annotation.Autowired;
  9. import org.springframework.stereotype.Controller;
  10. import org.springframework.web.bind.annotation.ModelAttribute;
  11. import org.springframework.web.bind.annotation.RequestMapping;
  12. import org.springframework.web.bind.annotation.RequestMethod;
  13. import org.springframework.web.bind.annotation.ResponseBody;
  14. import org.springframework.web.servlet.ModelAndView;
  15. import com.lemon.lifecenter.common.LifeCenterConfigVO;
  16. import com.lemon.lifecenter.common.LifeCenterController;
  17. import com.lemon.lifecenter.common.LifeCenterFunction;
  18. import com.lemon.lifecenter.common.LifeCenterSessionController;
  19. import com.lemon.lifecenter.dto.LoginDTO;
  20. import com.lemon.lifecenter.service.LoginService;
  21. @Controller
  22. @RequestMapping("/login")
  23. public class LoginController extends LifeCenterController {
  24. private final Logger logger = LoggerFactory.getLogger(this.getClass());
  25. @Autowired
  26. LifeCenterConfigVO config;
  27. @Autowired
  28. LoginService loginService;
  29. @RequestMapping("/admin")
  30. public ModelAndView adminLogin() {
  31. ModelAndView mv = setMV("login/admin");
  32. return mv;
  33. }
  34. @RequestMapping("/staff")
  35. public ModelAndView staffLogin() {
  36. ModelAndView mv = setMV("login/staff");
  37. return mv;
  38. }
  39. @RequestMapping( value="/check", method = RequestMethod.POST )
  40. @ResponseBody
  41. public String staffLoginCheck(
  42. @ModelAttribute("dto") final LoginDTO dto,
  43. HttpServletRequest request, HttpServletResponse response ) throws Exception {
  44. String remoteIp = LifeCenterFunction.getRemoteAddr( request );
  45. String resultCode = "";
  46. String message = "";
  47. String url = "";
  48. HashMap<String, String> accessMap = new HashMap<String, String>();
  49. JSONObject json = new JSONObject();
  50. // dto.setPassword( LifeCenterFunction.aesEncrypt( config.aesKey, config.IV, dto.getPassword() ) );
  51. String passwordVal = dto.getPassword();
  52. dto.setPassword( LifeCenterFunction.sha256Encrypt( passwordVal ) );
  53. int total = loginService.selectMemberCount( dto );
  54. if( total == 0 ) { //로그인실패시 log 남긴 후 failCount 처리
  55. resultCode = "01";
  56. message = "아이디 또는 비밀번호를 다시 확인하세요.<br/>등록되지 않은 사용자이거나, 잘못된 비밀번호입니다.";
  57. logger.info( "[LOGIN FAILED] RemoteIP : " + remoteIp + " ID : " + dto.getId() + "MESSAGE : " + LifeCenterFunction.removeTag( message ) );
  58. if( loginService.selectMemberIdCount( dto ) == 1 ) { //존재하는사용자일경우
  59. dto.setFailCount( loginService.selectMemberFailCount( dto ) + 1 ); //해당아이디의 failCount + 1
  60. dto.setResultCode( resultCode );
  61. accessMap.put( "id" , dto.getId() );
  62. accessMap.put( "ip" , remoteIp );
  63. accessMap.put( "successYn", "N" );
  64. accessMap.put( "logMessage" , LifeCenterFunction.removeTag( message ) );
  65. loginService.updateMemberLoginData( dto ); //해당 아이디의 failCount
  66. loginService.insertAccessHistory( accessMap );
  67. }
  68. } else { // 로그인 성공시 ( id, password 일치 )
  69. LoginDTO memberData = loginService.selectMemberData( dto );
  70. accessMap.put( "id" , dto.getId() );
  71. accessMap.put( "ip" , remoteIp );
  72. if( memberData.getUseYn().toUpperCase().equals( "N" ) ) { // 사용이 중지된 계정
  73. logger.info( "[LOGIN FAILED] RemoteIP : " + remoteIp + " ID : " + dto.getId() );
  74. resultCode = "02";
  75. message = "사용이 중지된 계정입니다. 관리자에게 문의하세요.";
  76. accessMap.put( "successYn", "N" );
  77. accessMap.put( "logMessage" , message );
  78. logger.info( "[LOGIN FAILED] RemoteIP : " + remoteIp + " ID : " + dto.getId() + "MESSAGE : " + message );
  79. loginService.insertAccessHistory( accessMap );
  80. } else {
  81. // 로그인 성공
  82. // failCount 0 초기화
  83. // last login time NOW() update
  84. resultCode = "00";
  85. message = "로그인 성공";
  86. dto.setFailCount( 0 );
  87. dto.setResultCode( resultCode );
  88. accessMap.put( "successYn", "Y" );
  89. accessMap.put( "logMessage" , message );
  90. logger.info( "[LOGIN SUCCESS] RemoteIP : " + remoteIp + " ID : " + dto.getId() + "MESSAGE : " + message );
  91. loginService.updateMemberLoginData( dto ); //failCount -> 0, lastLoginTime -> NOW()
  92. loginService.insertAccessHistory( accessMap ); //insert AccessHistory
  93. LifeCenterSessionController.sessionInvalidate( request );
  94. LifeCenterSessionController.setSession( request, "sesId", memberData.getId() );
  95. LifeCenterSessionController.setSession( request, "sesName", memberData.getName() );
  96. LifeCenterSessionController.setSession( request, "sesCenterCode", memberData.getCenterCode() );
  97. LifeCenterSessionController.setSession( request, "sesCenterName", memberData.getCenterName() );
  98. LifeCenterSessionController.setSession( request, "sesGroupIdx", String.valueOf( memberData.getGroupIdx() ) );
  99. LifeCenterSessionController.setSession( request, "sesPhoneNumber", String.valueOf( memberData.getPhoneNumber() ) );
  100. url = "/patient/list";
  101. if( memberData.getGroupIdx() == 1 ) {
  102. url = "/center/list";
  103. }
  104. // 로그인시 초기화 비밀번호일 경우 비밀번호 변경 페이지로 이동
  105. if( passwordVal.equals( config.staffResetPw ) || passwordVal.equals( config.centerResetPw ) ) {
  106. LifeCenterSessionController.setSession( request, "sesPasswordChange", "true" );
  107. url = "/staff/myinfo";
  108. }
  109. }
  110. }
  111. json.put( "code", resultCode );
  112. json.put( "message", message );
  113. json.put( "url", url );
  114. return json.toString();
  115. }
  116. @RequestMapping("/logout")
  117. public String staffLogout( HttpServletRequest request, HttpServletResponse response ) {
  118. String remoteIp = LifeCenterFunction.getRemoteAddr( request );
  119. String sesId = LifeCenterSessionController.getSession( request, "sesId" );
  120. LifeCenterSessionController.sessionInvalidate( request );
  121. logger.info( "[LOGOUT] RemoteIP : " + remoteIp + " UserId : " + sesId );
  122. return "redirect:/login/staff";
  123. }
  124. }