shjung %!s(int64=3) %!d(string=hai) anos
pai
achega
38cc14ff67

+ 2 - 2
src/main/java/com/its/op/controller/its/LoginController.java

@@ -59,8 +59,8 @@ public class LoginController {
      */
     @PostMapping("/login.do")
     public String postLogin(@ModelAttribute LoginDto.LoginReqDto login, Model model) {
-        log.error("{}", login.toString());
-        log.error("{}", model.toString());
+        log.error("postLogin: login, {}", login.toString());
+        log.error("postLogin: model, {}", model.toString());
         model.addAttribute("login", login);
         return "success";
     }

+ 1 - 1
src/main/java/com/its/op/entity/its/vms/TbVmsCtlr.java

@@ -373,7 +373,7 @@ public class TbVmsCtlr implements Serializable {
             dto.setPwerSttsDesc(CodeManager.getCodeDescShort(CodeManager.PWER_STTS_CD, dto.getPwerSttsCd()));           // 전원상태
             dto.setCboxDoorSttsDesc(CodeManager.getCodeDescShort(CodeManager.DOOR_STTS_CD, dto.getCboxDoorSttsCd()));   // 도어
             dto.setFanSttsDesc(CodeManager.getCodeDescShort(CodeManager.FAN_STTS_CD, dto.getFanSttsCd()));              // 팬상태
-            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getFanSttsCd()));            // 히터상태
+            dto.setHetrSttsDesc(CodeManager.getCodeDescShort(CodeManager.HETR_STTS_CD, dto.getHetrSttsCd()));           // 히터상태
         }
         else {
             dto.setModlSttsDesc(CodeManager.STTS_UNKNOWN);       // 모듈상태

+ 3 - 5
src/main/java/com/its/op/security/WebLoginFailureHandler.java

@@ -7,11 +7,11 @@ import org.springframework.security.core.userdetails.UsernameNotFoundException;
 import org.springframework.security.web.authentication.AuthenticationFailureHandler;
 import org.springframework.stereotype.Service;
 
-import javax.servlet.RequestDispatcher;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import java.io.IOException;
+import java.net.URLEncoder;
 
 @Slf4j
 @Service
@@ -44,10 +44,8 @@ public class WebLoginFailureHandler implements AuthenticationFailureHandler {
         }
         log.error("{}: {}, {}", key, message, request.getParameter("username"));
         request.setAttribute(key, message);
-        RequestDispatcher dispatcher = request.getRequestDispatcher("/login.html");
-        dispatcher.forward(request, response);
 
-//        request.setAttribute("username", request.getParameter("username"));
-//        request.getRequestDispatcher("/login_view?error=true").forward(request, response);
+        message = URLEncoder.encode(message, "UTF-8");
+        response.sendRedirect("/application/login/login.html?LoginFail=" + message);
     }
 }

+ 7 - 7
src/main/java/com/its/op/security/WebSecurityConfig.java

@@ -51,7 +51,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .disable()
         ;  // REST API 호출 유효하게(POST...)
         http
-            .authorizeRequests()
+                .authorizeRequests()
                 // SWAGGER 권한 설정
                 .antMatchers("/swagger-ui.html", "/swagger/**", "/swagger-resources/**", "/webjars/**", "/v2/api-docs").permitAll()
                 // 웹소켓 권한 설정하지
@@ -69,7 +69,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 //                .antMatchers("/api/**").permitAll()
                 .anyRequest().authenticated()
                 .and()
-            .formLogin()
+                .formLogin()
                 .loginPage("/application/login/login.html")
                 //.loginProcessingUrl("/api/auth/login.do")
                 .loginProcessingUrl("/api/auth/login.do")
@@ -80,7 +80,7 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .failureHandler(this.webLoginFailureHandler)
                 .permitAll()
                 .and()
-            .logout()
+                .logout()
                 //.logoutUrl("/api/auth/logout.do")
                 //.logoutRequestMatcher(new AntPathRequestMatcher("/api/auth/logout.do"))
                 .addLogoutHandler(new UserLogoutHandler()).permitAll()
@@ -90,15 +90,15 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
                 .deleteCookies(WebMvcConfig.USER_UUID)
                 .deleteCookies(WebMvcConfig.USER_TIME)
                 .and()
-            .sessionManagement()
+                .sessionManagement()
                 .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)   // 스프링 시큐리티가 필요 시 생성 (default)
                 // 인증에 성공할 때 마다 세션 ID나 세션을 변경해서 발급해줌으로써
                 // 세션을 중간에서 가로채더라도 해당 세션이 유효하지 않게 하는 기능
                 .invalidSessionUrl("/application/login/login.html")    // 세션이 유효하지 않을 경우 이동 할 페이지
                 .sessionFixation().changeSessionId()        // changeSessionId : 새로운 세션 ID를 발급해서 전달(default)
-                                                            // none            : 아무 동작 안함
-                                                            // migrateSession  : 새로운 세션을 생성해서 전달 (속성값 유지)
-                                                            // newSession      : 새로운 세션 전달 (속성값 유지 안됨)
+                // none            : 아무 동작 안함
+                // migrateSession  : 새로운 세션을 생성해서 전달 (속성값 유지)
+                // newSession      : 새로운 세션 전달 (속성값 유지 안됨)
                 .maximumSessions(20)                        // 최대 허용 가능 세션 수, -1인 경우 무제한 세션 허용
                 .maxSessionsPreventsLogin(true)             // 동시 로그인 차단, false 인 경우 기존 세션 만료(default)
                 .expiredUrl("/application/login/login.html")          // 세션이 만료된 경우 이동 할 페이지

+ 23 - 3
src/main/resources/static/application/login/login.js

@@ -1,4 +1,7 @@
 $(function () {
+    if (Request("LoginFail")) {
+        alertError(Request("LoginFail"), "로그인 오류");
+    }
     const id = $("input[name = 'username']");
     const pwd = $("input[name = 'password']");
     const logBtn = $("#login");
@@ -19,11 +22,9 @@ $(function () {
                 loginCheck();
             }
         });
-
     }
 
     init();
-
     function nullChecker(checkItem) {
         return checkItem || null;
     }
@@ -32,11 +33,30 @@ $(function () {
         let pwdVal = $.trim(pwd.val());
         if (!nullChecker(idVal)) {
             return alertWarning("ID를 입력해주세요", null, id);
-            id.focufalse;
         }
         if (!nullChecker(pwdVal)) {
             return alertWarning("비밀번호를 입력해주세요", null, pwd);
         }
+
         $("form").submit();
     }
 });
+
+function Request(valuename) {
+    //javascript로 구현한 Request
+    var rtnval = "";
+    var nowAddress = decodeURI(location.href);
+
+    var parameters = nowAddress.slice(nowAddress.indexOf("?") + 1, nowAddress.length).split("&");
+
+    for (var i = 0; i < parameters.length; i++) {
+        var varName = parameters[i].split("=")[0];
+        if (varName.toUpperCase() == valuename.toUpperCase()) {
+            rtnval = parameters[i].split("=")[1];
+            break;
+        }
+    }
+    console.log(rtnval);
+    console.log(nowAddress);
+    return rtnval.replaceAll("+", " ");
+}

BIN=BIN
src/main/resources/static/favicon.ico