admin.jsp 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  2. <%@ taglib prefix="form" uri="http://www.springframework.org/tags/form"%>
  3. <%@ page session="false"%>
  4. <%@ page language="java" contentType="text/html; charset=UTF-8"
  5. pageEncoding="UTF-8"%>
  6. <jsp:include page="${data._INCLUDE}/header.jsp"></jsp:include>
  7. <script>
  8. $(function() {
  9. // Datatables basic
  10. $("#datatables-basic").DataTable({
  11. responsive : true
  12. });
  13. // Datatables with Buttons
  14. var datatablesButtons = $("#datatables-buttons").DataTable({
  15. responsive : true,
  16. lengthChange : !1,
  17. buttons : [ "copy", "print" ]
  18. });
  19. datatablesButtons.buttons().container().appendTo(
  20. "#datatables-buttons_wrapper .col-md-6:eq(0)");
  21. // Datatables with Multiselect
  22. var datatablesMulti = $("#datatables-multi").DataTable({
  23. responsive : true,
  24. select : {
  25. style : "multi"
  26. }
  27. });
  28. });
  29. </script>
  30. <script>
  31. $( function(){
  32. setCookieCheck();
  33. $( "#id" ).focus();
  34. $( "#loginForm" ).validate({
  35. onfocusout: function (element) {
  36. $( element ).valid();
  37. $( "#msg" ).remove();
  38. },
  39. messages : {
  40. id : {
  41. required : "아이디를 입력해주세요."
  42. },
  43. password : {
  44. required : "비밀번호를 입력해주세요."
  45. }
  46. },
  47. submitHandler: function(form) {
  48. $( "#submitLoading" ).toggleClass( "d-none", false );
  49. $( "#submitBtn" ).toggleClass( "d-none", true );
  50. $.ajax({
  51. url : "./check",
  52. data : $("#loginForm").serialize(),
  53. method : "POST",
  54. dataType : "json",
  55. success : function( data ){
  56. var resultCode = data.code;
  57. var resultMsg = data.message;
  58. var resultUrl = data.url;
  59. if( data.code == "00" ) {
  60. location.href= resultUrl;
  61. } else {
  62. $( "#password" ).after( "<label id='msg' class='error'>" + resultMsg + "</label>" );
  63. $( "#submitLoading" ).toggleClass( "d-none", true );
  64. $( "#submitBtn" ).toggleClass( "d-none", false );
  65. };
  66. },
  67. error : function(){
  68. $( "#submitLoading" ).toggleClass( "d-none", true );
  69. $( "#submitBtn" ).toggleClass( "d-none", false );
  70. }
  71. }).done( function(){
  72. if( $( "#saveId" ).is( ":checked" ) ) {
  73. setCookie( "userInputId", $( "#id" ).val(), 365 );
  74. } else {
  75. deleteCookie( "userInputId" );
  76. }
  77. });
  78. }
  79. });
  80. });
  81. function setCookieCheck() {
  82. var cookieId = $.trim( getCookie( "userInputId" ) );
  83. var cookieSave = $.trim( getCookie( "saveIdChecked" ) );
  84. if( cookieId != "" ) {
  85. $( "#id" ).val( cookieId );
  86. }
  87. if( cookieSave != "" ){
  88. cookieSave = ( cookieSave === 'true' );
  89. $( "#saveId" ).prop( "checked", cookieSave );
  90. }
  91. $( "#saveId" ).on( "change", function(){
  92. var $this = $( this );
  93. console.log( $this );
  94. console.log( $this.is( ":checked" ) );
  95. if( $this.is( ":checked" ) === false ) {
  96. deleteCookie( "userInputId" );
  97. }
  98. setCookie( "saveIdChecked", $this.is( ":checked" ), 365 );
  99. });
  100. };
  101. </script>
  102. <style>
  103. /* #modal-window .modal-box.modal-size-normal{width:600px !important;margin-left:-300px !important;} */
  104. </style>
  105. <script>
  106. $( function(){
  107. var aa = moment().format("YYYY-MM-DD");
  108. var bb = moment('2021-06-25').format("YYYY-MM-DD");
  109. if( aa > bb ) {
  110. localStorage.noticePopup1 = "ok";
  111. }
  112. var lifeCenterNoticeLogin = localStorage.getItem( "noticePopup1" );
  113. if( lifeCenterNoticeLogin != "ok" ){
  114. alertBox({
  115. title : '<span class="" style="font-size:19px;font-weight:700 !important;font-size:18px !important;">생활치료센터 비대면진료시스템<br/>(공지사항)인터폴 보라색 수배서 통보<br/><font style="color:red;">(코로나19 관련 중요시설 대상 랜섬웨어 공격)</font></span><span style="position:absolute;font-size:18px;font-weight:600;top:10px;right:10px;color:red;">※외부유출금지※</span>',
  116. txt : '<div class="loginPopup text-dark" style="padding-left:5px;line-height:26px;font-size:13px !important;color:#000;">' +
  117. ' <div class="" style="color:#000;">코로나19와 관련된 중요 시설이나 병원등을 대상으로 악성 랜섬웨어 감염·공격을 감지하여, 예방 방안을 안내하오니 업무에 참고하여 주세요. </div>' +
  118. ' <div class="" style="color:#000;"><br/><span style="font-weight:700;margin-left:-10px;font-size:18px;">□ 주요 수법</span><br/>○ 현재까지 확인된 사례상 랜섬웨어 공격이 코로나19 관련 중요 시설이나 병원 등을 대상으로 하고 있으며, 시스템 침투 후, 모든 서류들을 암호화하거나 삭제하고, 금전을 요구하는 수법</div>' +
  119. ' <div class="" style="color:#000;">- ① 악성 이메일 및 첨부파일 등 배포<br/> - ② 악성 이메일 및 첨부파일 확인 및 다운로드<br/>- ③ 사용자 권한 장애 유발 및 시스템 취약점 이용 : 원격 데스크톱 프로토콜(RDP, Remote Desktop Protocol) 등을 이용하여 시스템 내부 주요 정보를 충분히 수집<br/>- ④ 악성 랜섬웨어 시스템 침투시켜 코로나19 대응 및 환자 치료에 필수적인 정보 암호화<br/> - ⑤ 암호화폐를 통한 금전 지급 요구, 수집된 주요 정보 일부를 다크웹에 유출 (실제 금원을 지급하더라도 기존 파일이 회수되거나 시스템이 정상화 된다는 보장이 없음)<br/>※ 추가로 백도어를 설치하여 시스템에 2차 접근 후 랜섬웨어 공격을 가할 가능성 존재</div>' +
  120. ' <div class="" style="color:red;"><br/><span style="font-weight:700;margin-left:-10px;font-size:18px;">□ 예방 방안</span><br/>○ 주기적인 파일 백업, 시스템 업데이트, 안티 바이러스 소프트웨어 사용스팸 메일 차단 등 주의, 악성 이메일 열람이나 첨부파일 확인 등에 대한 전 직원주의, 안전 비밀번호 사용 및 이중 인증(2FA) 실시, 시스템 관련 매일 정기점검, 원격 데스크톱 프로토콜(RDP) 등 시스템 취약점 점검, 도입시스템 계정 관련 보안 강화, 민감 정보 노출 최소화를 위한 네트워크 분리 및 데이터 카테고리화, 제3자 침입 방지 등</div>' +
  121. ' <div class="" style="color:#000;"><br/><span style="font-weight:700;margin-left:-10px;font-size:18px;">□ 시스템 이용문의</span><br/><font style="">○ <font style="">☎1661-8308 (★365일 연중무휴★ ★운영시간 : 오전 9시 ~ 오후 6시)</font></font><br/>※ 상담원이 통화 중인 경우, 통화 가능한 전화번호를 남겨주시면, 상담원이 전화 드립니다.</div>' +
  122. '</div>' +
  123. '<label id="check-notice"><input type="checkbox" id="life-center-notice" /> 다시보지않기 <label>',
  124. callBack : function( result ){
  125. if( $( "#life-center-notice" ).prop( "checked" ) == true ){
  126. localStorage.noticePopup1 = "ok";
  127. }
  128. }
  129. });
  130. }
  131. });
  132. </script>
  133. <style type="text/css">
  134. #check-notice{ font-size: 14px;
  135. margin-top: 20px;
  136. position: absolute;
  137. border: 1px solid #c9c9c9;
  138. background: #FFFFFF;
  139. height: 33px;
  140. line-height: 33px;
  141. bottom: 4px;
  142. padding: 0 10px;}
  143. /* .notice-en{font-size:14px;color:#444;} */
  144. </style>
  145. </head>
  146. <body>
  147. <%-- <jsp:include page="${data._INCLUDE}/sidebar.jsp"></jsp:include> --%>
  148. <main class="main d-flex w-100">
  149. <div class="container d-flex flex-column">
  150. <div class="row h-100">
  151. <div
  152. class="col-sm-10 col-md-8 col-lg-6 mx-auto d-table h-100">
  153. <div class="d-table-cell align-middle">
  154. <div class="text-center mb-4">
  155. <div class="mb-4"><span class="bg-danger text-white h3 p-2 align-center">ADMIN LOGIN</span></div>
  156. <h1 class="h2">생활치료센터 비대면진료시스템</h1>
  157. <p class="lead">Residential treatment center Untact Treatment System</p>
  158. </div>
  159. <div class="card pb-2">
  160. <div class="card-body">
  161. <div class="m-sm-4" style="margin-bottom:20px !important;">
  162. <form id="loginForm" action="./check" method="post">
  163. <div class="form-group">
  164. <label>아이디</label>
  165. <input id="id" class="form-control form-control-lg" type="text" name="id" placeholder="아이디" tabindex="1" maxlength="20" required>
  166. </div>
  167. <div class="form-group">
  168. <label>비밀번호</label>
  169. <input id="password" class="form-control form-control-lg" type="password" name="password" placeholder="비밀번호" autocomplete="off" tabindex="2" maxlength="15" required>
  170. </div>
  171. <div>
  172. <div class="custom-control custom-checkbox align-items-center text-right">
  173. <input type="checkbox" id="saveId" class="custom-control-input" value="remember-me" name="remember-me" checked="checked">
  174. <label for="saveId" class="custom-control-label text-small">아이디 저장</label>
  175. </div>
  176. </div>
  177. <div class="text-center mt-3">
  178. <button id="submitBtn" type="submit" class="btn btn-lg btn-primary">로그인</button>
  179. <div id="submitLoading" class="d-none align-bottom spinner-border text-primary" role="status">
  180. <span class="sr-only">Loading...</span>
  181. </div>
  182. <!-- <a href="../patient/list" class="btn btn-lg btn-primary">로그인</a> -->
  183. </div>
  184. </form>
  185. </div>
  186. </div>
  187. <div class="text-center">
  188. <div class="d-flex flex-wrap justify-content-center align-content-center text-center">
  189. <a class="btn btn-primary ml-3 mr-3 mb-1 mt-1" target="_blank" href="/store/manual/staff">의료진 사용자 매뉴얼 다운로드</a>
  190. <a class="btn btn-primary ml-3 mr-3 mb-1 mt-1" target="_blank" href="/store/manual/patient">환자용 앱 사용자 매뉴얼 다운로드</a>
  191. </div>
  192. </div>
  193. </div>
  194. </div>
  195. </div>
  196. </div>
  197. </div>
  198. </main>
  199. <%-- <jsp:include page="${data._INCLUDE}/footer.jsp"></jsp:include> --%>
  200. </body>
  201. </html>