shjung пре 3 година
родитељ
комит
a2f928ed92
26 измењених фајлова са 196 додато и 336 уклоњено
  1. 8 1
      src/main/java/com/its/api/aop/ApiHandlerInterceptor.java
  2. 1 1
      src/main/java/com/its/api/config/VdsServerConfig.java
  3. 3 4
      src/main/java/com/its/api/its/model/dto/vms/TbVmsLumSetSchDto.java
  4. 3 2
      src/main/java/com/its/api/webapp/config/WebMvcConfig.java
  5. 26 24
      src/main/java/com/its/api/webapp/config/WebSecurityConfig.java
  6. 71 0
      src/main/java/com/its/api/webapp/controller/WebAppController.java
  7. 0 23
      src/main/java/com/its/api/webapp/controller/WebFacilityController.java
  8. 0 35
      src/main/java/com/its/api/webapp/controller/WebOpController.java
  9. 0 23
      src/main/java/com/its/api/webapp/controller/WebRedirectController.java
  10. 0 23
      src/main/java/com/its/api/webapp/controller/WebWallController.java
  11. 18 2
      src/main/java/com/its/api/webapp/domain/UserInfrVo.java
  12. 46 0
      src/main/java/com/its/api/webapp/security/WebPasswordEncoder.java
  13. 3 0
      src/main/java/com/its/api/webapp/service/WebLoginService.java
  14. 2 1
      src/main/resources/application.yml
  15. 0 0
      src/main/resources/logback-spring.xmlx
  16. 0 11
      src/main/resources/static/application/index.html
  17. 0 0
      src/main/resources/static/application/login/MainLogo.png
  18. 0 0
      src/main/resources/static/application/login/MainLogo1.png
  19. 0 0
      src/main/resources/static/application/login/font-awesome.min.css
  20. 2 2
      src/main/resources/static/application/login/login.css
  21. 5 5
      src/main/resources/static/application/login/login.html
  22. 2 2
      src/main/resources/static/application/login/login.js
  23. 0 0
      src/main/resources/static/application/login/loginPage.png
  24. 0 161
      src/main/resources/static/application/map-daum-ol-mapping.html
  25. 0 10
      src/main/resources/static/index.html
  26. 6 6
      src/main/resources/static/js/vworld/map-config.js

+ 8 - 1
src/main/java/com/its/api/aop/ApiHandlerInterceptor.java

@@ -17,7 +17,14 @@ public class ApiHandlerInterceptor implements HandlerInterceptor {
         if (StringUtils.equalsIgnoreCase("GET", request.getMethod())) {
             log.error("{}", request.getRequestURI());
         }
-        log.error("preHandle: {}, {}, {}", request.getRequestURI(), request.getMethod(), handler);
+        //else {
+        log.error("preHandle1: {}", request.getContextPath());
+        log.error("preHandle2: {}", request.getPathInfo());
+        log.error("preHandle3: {}", request.getMethod());
+        log.error("preHandle4: {}", request.getAuthType());
+
+        //}
+//        log.error("preHandle: {}, {}, {}", request.getRequestURI(), request.getMethod(), handler);
         return true;
     }
 

+ 1 - 1
src/main/java/com/its/api/config/VdsServerConfig.java

@@ -21,7 +21,7 @@ public class VdsServerConfig {
     private String  processId;
     private String  ipAddress;
     private int     port;
-    private int     reconnectTime = 30; // 재접속 seconds
+    private int     reconnectTime = 60; // 재접속 seconds
 
     @PostConstruct
     private void init() {

+ 3 - 4
src/main/java/com/its/api/its/model/dto/vms/TbVmsLumSetSchDto.java

@@ -6,7 +6,6 @@ import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
 
-import javax.persistence.Column;
 import javax.validation.constraints.Pattern;
 import javax.validation.constraints.PositiveOrZero;
 import javax.validation.constraints.Size;
@@ -43,15 +42,15 @@ public class TbVmsLumSetSchDto implements Serializable {
     private String useDesc;
 
     @ApiModelProperty("VMS ID")  // Y VARCHAR(4)
-    @Column(name = "VMS_ID", length = 4)
+    @JsonProperty("vms_id")
     private String vmsId;
 
     @ApiModelProperty("VMS 제어기 ID")  // Y VARCHAR(30)
-    @Column(name = "VMS_CTLR_ID", length = 30)
+    @JsonProperty("vms_ctrl_id")
     private String vmsCtlrId;
 
     @ApiModelProperty("VMS 명")  // Y VARCHAR(40)
-    @Column(name = "VMS_NM", length = 40)
+    @JsonProperty("vms_nm")
     private String vmsNm;
 
     @ApiModel("TbVmsLumSetSchUpdReq(VMS 휘도설정 스케쥴 정보변경)")

+ 3 - 2
src/main/java/com/its/api/webapp/config/WebMvcConfig.java

@@ -12,8 +12,9 @@ public class WebMvcConfig implements WebMvcConfigurer {
 
     @Override
     public void addInterceptors(InterceptorRegistry registry) {
-        registry.addInterceptor(new ApiHandlerInterceptor())
-                .addPathPatterns("/api/**")      // 해당 경로에 접근하기 전에 인터셉터가 가로챈다.
+        registry
+                .addInterceptor(new ApiHandlerInterceptor())
+                .addPathPatterns("/api/**")     // 해당 경로에 접근하기 전에 인터셉터가 가로챈다.
                 .excludePathPatterns("/boards") // 해당 경로는 인터셉터가 가로채지 않는다.
                 ;
     }

+ 26 - 24
src/main/java/com/its/api/webapp/config/WebSecurityConfig.java

@@ -1,5 +1,6 @@
 package com.its.api.webapp.config;
 
+import com.its.api.webapp.security.WebPasswordEncoder;
 import com.its.api.webapp.security.WebSessionListener;
 import com.its.api.webapp.service.WebLoginService;
 import lombok.RequiredArgsConstructor;
@@ -12,7 +13,6 @@ import org.springframework.security.config.annotation.web.configuration.EnableWe
 import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
 import org.springframework.security.core.session.SessionRegistry;
 import org.springframework.security.core.session.SessionRegistryImpl;
-import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
 import org.springframework.security.crypto.password.PasswordEncoder;
 
 import javax.servlet.http.HttpSessionListener;
@@ -33,26 +33,31 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
     @Override
     protected void configure(HttpSecurity http) throws Exception {
-        http.csrf().disable();  // REST API 호출 유효하게.....
+        http.csrf().disable();  // REST API 호출 유효하게(POST...)
         http.authorizeRequests()
+                // SWAGGER 권한 설정
+                .antMatchers("/swagger-ui.html", "/swagger/**", "/swagger-resources/**", "/webjars/**", "/v2/api-docs").permitAll()
+                // 웹소켓 권한 설정하지
+                .antMatchers("/ws/**").permitAll()
+                // API 권한 설정하지
+                .antMatchers("/api/**").permitAll()
+                // 지도 URI 권한 설정하지
+                .antMatchers("/MAPDATA/**").permitAll()
                 // 페이지 권한 설정
-                .antMatchers("/index.html").permitAll()
-                .antMatchers("/application/facility/**").permitAll()
-                .antMatchers("/application/wall/**").permitAll()
-                .antMatchers("/swagger-ui.html", "/swagger/**", "/swagger-resources/**", "/webjars/**", "/v2/api-docs", "/login.do").permitAll()
-                .antMatchers("/login.do").permitAll()
-                .antMatchers("/**").permitAll()
-//                .and()
-//                .formLogin()
-//                .loginPage("login.html")
-//                .permitAll()
-//                .antMatchers("/index").hasRole("ADMIN")
-//                .antMatchers("/**").hasRole("ADMIN")
-//                .and() // 로그인 설정
-//                .formLogin()
-//                .loginPage("/login")
-//                .defaultSuccessUrl("/index")
-//                .permitAll()
+                .antMatchers("/application/facility/**", "/facility/**").permitAll()
+                .antMatchers("/application/wall/**", "/wall/**").permitAll()
+                .antMatchers("/application/login/**").permitAll()
+                .anyRequest().authenticated()
+                .and()
+                .formLogin()
+                .loginPage("/application/login/login.html")
+                .loginProcessingUrl("/login.do")
+                .defaultSuccessUrl("/application/op/00.main/main.html", true)
+                .usernameParameter("username")
+                .passwordParameter("password")
+                .permitAll()
+
+
 //                .and() // 로그아웃 설정
 //                .logout()
 //                .logoutRequestMatcher(new AntPathRequestMatcher("/logout"))
@@ -64,8 +69,6 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 //                .exceptionHandling().accessDeniedPage("/login");
         ;
 
-
-
 //        http.sessionManagement()
 //                .sessionCreationPolicy(SessionCreationPolicy.IF_REQUIRED)
 //                .invalidSessionUrl("/login")
@@ -80,13 +83,12 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
 
     @Override
     public void configure(AuthenticationManagerBuilder auth) throws Exception {
-        auth.userDetailsService(loginService);
-        //auth.userDetailsService(loginService).passwordEncoder(passwordEncoder());
+        auth.userDetailsService(this.loginService).passwordEncoder(passwordEncoder());
     }
 
     @Bean
     public PasswordEncoder passwordEncoder() {
-        return new BCryptPasswordEncoder();
+        return new WebPasswordEncoder();
     }
 
     @Bean

+ 71 - 0
src/main/java/com/its/api/webapp/controller/WebAppController.java

@@ -0,0 +1,71 @@
+package com.its.api.webapp.controller;
+
+import com.its.api.its.model.dto.LoginDto;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Controller;
+import org.springframework.ui.Model;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ModelAttribute;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@Slf4j
+@Controller
+@RequestMapping("")
+public class WebAppController {
+
+    private final String operContext = "forward:/application/op";
+    private final String wallContext = "forward:/application/wall";
+    private final String fcltContext = "forward:/application/facility";
+
+    @RequestMapping({"", "/", "/index.do"})
+    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
+        return new ModelAndView(this.operContext + "/index.html");
+    }
+
+    /**
+     * 로그인 화면 리다이렉션
+     * @param request
+     * @param response
+     * @return
+     */
+    @GetMapping("/login.do")
+    public ModelAndView getLogin(HttpServletRequest request, HttpServletResponse response) {
+        return new ModelAndView("forward:/application/login/login.html");
+    }
+
+    @PostMapping("/login.do")
+    public String postLogin(@ModelAttribute LoginDto.LoginReqDto login, Model model) {
+        log.error("{}", login.toString());
+        log.error("{}", model.toString());
+        model.addAttribute("login", login);
+        return "success";
+    }
+
+    /**
+     * 시설물 관리 리다이렉션
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping({"/facility", "/facility/", "/facility/index.do"})
+    public ModelAndView facility(HttpServletRequest request, HttpServletResponse response) {
+        return new ModelAndView(this.fcltContext + "/index.html");
+    }
+
+    /**
+     * 상황판 리다이렉션
+     * @param request
+     * @param response
+     * @return
+     */
+    @RequestMapping({"/wall", "/wall/", "/wall/index.do"})
+    public ModelAndView wall(HttpServletRequest request, HttpServletResponse response) {
+        return new ModelAndView(this.wallContext + "/index.html");
+    }
+
+}

+ 0 - 23
src/main/java/com/its/api/webapp/controller/WebFacilityController.java

@@ -1,23 +0,0 @@
-package com.its.api.webapp.controller;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Slf4j
-@Controller
-@RequestMapping("/facility")
-public class WebFacilityController {
-
-    private final String baseContext = "forward:/application/facility";
-
-    @RequestMapping({"", "/", "/index.do"})
-    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
-        return new ModelAndView(this.baseContext + "/index.html");
-    }
-
-}

+ 0 - 35
src/main/java/com/its/api/webapp/controller/WebOpController.java

@@ -1,35 +0,0 @@
-package com.its.api.webapp.controller;
-
-import com.its.api.its.model.dto.LoginDto;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Controller;
-import org.springframework.ui.Model;
-import org.springframework.web.bind.annotation.ModelAttribute;
-import org.springframework.web.bind.annotation.PostMapping;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Slf4j
-@Controller
-@RequestMapping("/op")
-public class WebOpController {
-
-    private final String baseContext = "forward:/application/op";
-
-    @RequestMapping({"", "/", "/index.do"})
-    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
-        return new ModelAndView(this.baseContext + "/index.html");
-    }
-
-    @PostMapping("/login.do")
-    public String greetingSubmit(@ModelAttribute LoginDto.LoginReqDto login, Model model) {
-        log.error("{}", login.toString());
-        log.error("{}", model.toString());
-        model.addAttribute("greeting", login);
-        return "/op/login.do";
-    }
-
-}

+ 0 - 23
src/main/java/com/its/api/webapp/controller/WebRedirectController.java

@@ -1,23 +0,0 @@
-package com.its.api.webapp.controller;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Slf4j
-@Controller
-@RequestMapping("")
-public class WebRedirectController {
-
-    private final String baseContext = "forward:/application";
-
-    @RequestMapping({"", "/", "/index.do"})
-    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
-        return new ModelAndView(this.baseContext + "/index.html");
-    }
-
-}

+ 0 - 23
src/main/java/com/its/api/webapp/controller/WebWallController.java

@@ -1,23 +0,0 @@
-package com.its.api.webapp.controller;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Controller;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.servlet.ModelAndView;
-
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-@Slf4j
-@Controller
-@RequestMapping("/wall")
-public class WebWallController {
-
-    private final String baseContext = "forward:/application/wall";
-
-    @RequestMapping({"", "/", "/index.do"})
-    public ModelAndView index(HttpServletRequest request, HttpServletResponse response) {
-        return new ModelAndView(this.baseContext + "/index.html");
-    }
-
-}

+ 18 - 2
src/main/java/com/its/api/webapp/domain/UserInfrVo.java

@@ -2,8 +2,10 @@ package com.its.api.webapp.domain;
 
 import com.its.api.its.model.dto.oper.TbUserInfrDto;
 import com.its.api.its.model.entity.oper.TbUserInfr;
+import com.its.api.webapp.security.WebPasswordEncoder;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.*;
+import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang.StringUtils;
 import org.springframework.security.core.GrantedAuthority;
 import org.springframework.security.core.authority.SimpleGrantedAuthority;
@@ -16,6 +18,7 @@ import java.util.Set;
 /**
  * 사용자정보 Entity Class
  */
+@Slf4j
 @Data
 @NoArgsConstructor(access = AccessLevel.PROTECTED)
 @Builder
@@ -95,6 +98,7 @@ public class UserInfrVo implements UserDetails {
                 .operSystId(this.operSystId)
                 .build();
     }
+
     @Override
     public Collection<? extends GrantedAuthority> getAuthorities() {
         Set<GrantedAuthority> roles = new HashSet<GrantedAuthority>();
@@ -107,38 +111,50 @@ public class UserInfrVo implements UserDetails {
         else {
             roles.add(new SimpleGrantedAuthority("ADMIN"));
         }
+        log.error("getAuthorities: {}", roles.toString());
         return roles;
     }
 
     @Override
     public String getPassword() {
-//        BCryptPasswordEncoder be = new BCryptPasswordEncoder();
-//        return be.encode(this.pwd);
+        log.error("getPassword: {}", this.pwd);
+        WebPasswordEncoder be = new WebPasswordEncoder();
+        String pwd = be.encode(this.pwd);
+        log.error("getPassword: {}, encoded.", this.pwd);
         return pwd;
     }
 
     @Override
     public String getUsername() {
+//        log.error("{}", Thread.currentThread().getStackTrace()[0].toString());
+//        log.error("{}", Thread.currentThread().getStackTrace()[1].toString());
+//        log.error("{}", Thread.currentThread().getStackTrace()[2].toString());
+//        log.error("{}", Thread.currentThread().getStackTrace()[3].toString());
+        log.error("getUsername: {}, {}.{}", this.userId, Thread.currentThread().getStackTrace()[2].getClassName(), Thread.currentThread().getStackTrace()[2].getMethodName());
         return this.userId;
     }
 
     @Override
     public boolean isAccountNonExpired() {
+        log.error("isAccountNonExpired");
         return true;
     }
 
     @Override
     public boolean isAccountNonLocked() {
+        log.error("isAccountNonLocked");
         return true;
     }
 
     @Override
     public boolean isCredentialsNonExpired() {
+        log.error("isCredentialsNonExpired");
         return true;
     }
 
     @Override
     public boolean isEnabled() {
+        log.error("isEnabled: {}", StringUtils.equalsIgnoreCase("N", this.delYn));
         return StringUtils.equalsIgnoreCase("N", this.delYn);
     }
 }

+ 46 - 0
src/main/java/com/its/api/webapp/security/WebPasswordEncoder.java

@@ -0,0 +1,46 @@
+package com.its.api.webapp.security;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang.StringUtils;
+import org.springframework.security.crypto.password.PasswordEncoder;
+
+@Slf4j
+public class WebPasswordEncoder implements PasswordEncoder {
+
+    @Override
+    public String encode(CharSequence rawPassword) {
+        // UserInfrVo 의 비밀번호(DB 에서 조회한 비밀번호)
+        if (rawPassword == null) {
+            throw new IllegalArgumentException("rawPassword cannot be null");
+        }
+
+        log.error("encode: {}", rawPassword.toString());
+        return rawPassword.toString();
+    }
+
+    @Override
+    public boolean matches(CharSequence rawPassword, String encodedPassword) {
+        // 사용자가 입력한 비밀번호: rawPassword
+        // UserDetails.getPassword : encodedPassword
+        if (rawPassword == null) {
+            throw new IllegalArgumentException("rawPassword cannot be null");
+        }
+
+        if (encodedPassword == null || encodedPassword.length() == 0) {
+            log.warn("Empty encoded password");
+            return false;
+        }
+        log.error("matches: {}, {}, {}", rawPassword.toString(), encodedPassword, StringUtils.equals(rawPassword.toString(), encodedPassword));
+        return StringUtils.equals(rawPassword.toString(), encodedPassword);
+    }
+
+    @Override
+    public boolean upgradeEncoding(String encodedPassword) {
+        log.error("upgradeEncoding: {}", encodedPassword);
+        if (encodedPassword == null || encodedPassword.length() == 0) {
+            log.warn("Empty encoded password");
+            return false;
+        }
+        return true;
+    }
+}

+ 3 - 0
src/main/java/com/its/api/webapp/service/WebLoginService.java

@@ -6,6 +6,7 @@ import com.its.api.its.repository.oper.TbUserCnncHsRepository;
 import com.its.api.its.repository.oper.TbUserInfrRepository;
 import com.its.utils.ItsUtils;
 import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
 import org.springframework.security.core.userdetails.UserDetails;
 import org.springframework.security.core.userdetails.UserDetailsService;
 import org.springframework.security.core.userdetails.UsernameNotFoundException;
@@ -13,6 +14,7 @@ import org.springframework.stereotype.Service;
 
 import java.util.Optional;
 
+@Slf4j
 @Service
 @RequiredArgsConstructor
 public class WebLoginService implements UserDetailsService {
@@ -22,6 +24,7 @@ public class WebLoginService implements UserDetailsService {
 
     @Override
     public UserDetails loadUserByUsername(String userId) throws UsernameNotFoundException {
+        log.error("loadUserByUsername: {}", userId);
         LoginDto result = LoginDto.builder()
                 .userId(userId)
                 .loginHms(ItsUtils.getSysTime())

+ 2 - 1
src/main/resources/application.yml

@@ -80,6 +80,7 @@ logging:
     org.hibernate.SQL: INFO
     org:
       springframework:
+        #security: DEBUG
         jdbc:
           core:
             JdbcTemplate: DEBUG
@@ -88,4 +89,4 @@ logging:
         type:
           descriptor:
             sql:
-              BasicBinder: TRACE
+              BasicBinder: TRACE

+ 0 - 0
src/main/resources/logback-spring.xml → src/main/resources/logback-spring.xmlx


+ 0 - 11
src/main/resources/static/application/index.html

@@ -1,11 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>Title</title>
-</head>
-<body>
-<h1>static/application/index.html</h1>
-
-</body>
-</html>

+ 0 - 0
src/main/resources/static/MainLogo.png → src/main/resources/static/application/login/MainLogo.png


+ 0 - 0
src/main/resources/static/MainLogo1.png → src/main/resources/static/application/login/MainLogo1.png


+ 0 - 0
src/main/resources/static/font-awesome.min.css → src/main/resources/static/application/login/font-awesome.min.css


+ 2 - 2
src/main/resources/static/login.css → src/main/resources/static/application/login/login.css

@@ -30,7 +30,7 @@ html {
     align-items: flex-end;
     height: 398px;
     border: 1px solid #eeeeee;
-    background: url(./loginPage.png);
+    background: url(loginPage.png);
     background-size: 900px;
     background-repeat: no-repeat;
     box-shadow: 4px 4px 3px 3px #eeeeee;
@@ -75,7 +75,7 @@ html {
 } */
 
 .logoImage {
-    background-image: url(./MainLogo.png);
+    background-image: url(MainLogo.png);
     background-repeat: no-repeat;
     width: 216px;
     height: 80px;

+ 5 - 5
src/main/resources/static/login.html → src/main/resources/static/application/login/login.html

@@ -4,10 +4,10 @@
         <meta charset="UTF-8" />
         <title>Log-In</title>
         <!-- <script src="https://kit.fontawesome.com/c818c46fe5.js" crossorigin="anonymous"></script> -->
-        <link rel="stylesheet" href="./font-awesome.min.css" />
+        <link rel="stylesheet" href="font-awesome.min.css" />
         <script src="/libs/jquery/jquery-3.6.0.min.js"></script>
-        <link rel="stylesheet" href="./login.css" />
-        <script type="text/javascript" src="./login.js"></script>
+        <link rel="stylesheet" href="login.css" />
+        <script type="text/javascript" src="login.js"></script>
     </head>
     <body>
         <div class="flex-container">
@@ -18,11 +18,11 @@
                 <div class="input-box">
                     <div>
                         아이디
-                        <input type="text" name="user_id" />
+                        <input type="text" name="username" />
                     </div>
                     <div>
                         비밀번호
-                        <input type="password" name="pwd" />
+                        <input type="password" name="password" />
                     </div>
                     <div>
                         <i class="fa fa-lock" style="position: relative; font-size: 40px" aria-hidden="true"></i>

+ 2 - 2
src/main/resources/static/login.js → src/main/resources/static/application/login/login.js

@@ -1,6 +1,6 @@
 $(function () {
-    const id = $("input[name = 'user_id']");
-    const pwd = $("input[name = 'pwd']");
+    const id = $("input[name = 'username']");
+    const pwd = $("input[name = 'password']");
     const logBtn = $(".input-box > div:nth-child(3)");
     function init() {
         logBtn.on("click", () => {

+ 0 - 0
src/main/resources/static/loginPage.png → src/main/resources/static/application/login/loginPage.png


+ 0 - 161
src/main/resources/static/application/map-daum-ol-mapping.html

@@ -1,161 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-    <head>
-        <meta charset="UTF-8" />
-        <meta http-equiv="X-UA-Compatible" content="IE=edge" />
-        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
-        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no" />
-        <title>Map Test</title>
-
-        <script type="text/javascript" src="//dapi.kakao.com/v2/maps/sdk.js?appkey=9e3f10da48feed8cdebc55db091b8ad6"></script>
-        <script src="/libs/proj4/proj4.js"></script>
-        <script src="/libs/v6.14.1-dist/ol.js"></script>
-        <script src="/libs/v6.14.1-dist/ol-ext/ol-ext.js"></script>
-        <link rel="stylesheet" href="/libs/v6.14.1-dist/ol.css" />
-        <link rel="stylesheet" href="/libs/v6.14.1-dist/ol-ext/ol-ext.css" />
-    </head>
-    <body>
-        <div style="position: absolute; left: 0px; right: 0px; height: 100%; width: 100%">
-            <div id="map-kakao" style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; z-index: -1"></div>
-            <div id="map" style="position: absolute; left: 0px; top: 0px; width: 100%; height: 100%; z-index: 0"></div>
-        </div>
-
-        <script>
-            const epsg3857 = "EPSG:3857"; // ol.Map, google
-            const epsg5181 = "EPSG:5181"; // kakao map
-            const epsg5179 = "EPSG:5179"; // naver map
-            const epsg4326 = "EPSG:4326"; // wgs84, gps
-
-            initProj();
-
-            let center = [127.109873, 37.283203];
-
-            // naver
-            //const extent = [90112, 1192896, 2187264, 2765760]; // 4 * 3
-            //const resolutions = [2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5, 0.25];
-
-            // kakao
-            const extent = [107516.3257, 45569.7688, 292483.6743, 537099.1393];
-            const resolutions = [2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2, 1, 0.5, 0.25];
-            const epsgCode = epsg5181;
-            const projection = new ol.proj.Projection({
-                code: epsgCode,
-                extent: [-30000, -60000, 1018576, 988576],
-                units: "m",
-            });
-            const projectionExtent = projection.getExtent();
-            center = ol.proj.transform(center, epsg4326, epsg5181);
-            //center = new ol.geom.Point(center).transform(epsg4326, epsg5181).getCoordinates();
-            console.log(center);
-            // 1km (1000m) 축척 기준
-            // 카카오 : 7(1~14), 네이버 : 13
-            // 지도 확대: 카카오는 감소, 네이버는 증가
-
-            const minZoom = 1;
-            const maxZoom = 14; // 다음지도 1 ~ 14레벨 사용
-            const view = new ol.View({
-                center: center, //[127.109873, 37.283203],
-                projection: epsg5181,
-                resolutions: resolutions,
-                zoom: 7,
-                minZoom: minZoom,
-                maxZoom: maxZoom,
-            });
-
-            let interactions = ol.interaction.defaults().extend([]);
-            //interactions = ol.interaction.defaults().extend([new app.Drag()]);
-            interactions = ol.interaction
-                .defaults({
-                    dragPan: false,
-                    mouseWheelZoom: false,
-                    constrainResolution: true,
-                })
-                .extend([
-                    new ol.interaction.DragPan({ kinetic: false }),
-                    new ol.interaction.MouseWheelZoom({
-                        duration: 0,
-                        constrainResolution: true,
-                    }),
-                ]);
-
-            //Map
-            const map = new ol.Map({
-                interactions: interactions,
-                target: "map",
-                renderer: "canvas",
-                controls: ol.control.defaults({ attribution: false }).extend([
-                    //new ol.control.Zoom({ duration: -1000, constrainResolution: true }),
-                    //new ol.control.ZoomSlider({ duration: -1000, constrainResolution: true }),
-                    //new ol.control.ScaleLine(),
-                    new ol.control.MousePosition({
-                        projection: epsg4326,
-                        coordinateFormat: ol.coordinate.createStringXY(4),
-                        undefinedHTML: "&nbsp;",
-                    }),
-                ]),
-                logo: false,
-                view: view,
-            });
-
-            center = view.getCenter();
-            const centerKakao = ol.proj.transform(center, epsg5181, epsg4326);
-            const container = document.getElementById("map-kakao");
-            const kakaoMap = new kakao.maps.Map(container, {
-                center: new kakao.maps.LatLng(centerKakao[1], centerKakao[0]), //지도의 중심좌표.
-                level: 14 - Math.round(view.getZoom()), //지도의 레벨(확대, 축소 정도)
-            });
-
-            map.on("moveend", (e) => {
-                //지도 변경 여기서 처리
-                console.log("map moved................");
-            });
-            view.on("change:center", () => {
-                moveKakaoMap(false);
-            });
-            view.on("change:resolution", () => {
-                moveKakaoMap(true);
-                //kakaoMap.relayout(); // 지도표출하는 영역이 변경되면 반드시 호출해야함....
-            });
-            //console.log(kakaoMap);
-            //console.log(view.getZoom(), kakaoMap.getLevel());
-
-            function moveKakaoMap(changeZoom) {
-                if (changeZoom && view.getZoom() != undefined) {
-                    const zoom = Math.round(view.getZoom());
-                    kakaoMap.setLevel(14 - zoom);
-                }
-                const c = ol.proj.transform(view.getCenter(), epsg5181, epsg4326);
-                kakaoMap.setCenter(new kakao.maps.LatLng(c[1], c[0]));
-            }
-
-            function initProj() {
-                // google 좌표계
-                proj4.defs("EPSG:3857", "+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0 +k=1.0 +units=m +nadgrids=@null +no_defs");
-                // UTM-K 좌표계, NAVER
-                //proj4.defs("EPSG:5179", "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
-                proj4.defs("EPSG:5179", "+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +axis=neu +no_defs");
-
-                proj4.defs(
-                    "EPSG:5174",
-                    "+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +towgs84=-115.8,474.99,674.11,1.16,-2.31,-1.63,6.43 +units=m +axis=neu +no_defs"
-                );
-
-                // 중부원점(GRS80) [200,000 500,000], KAKAO
-                //proj4.defs("EPSG:5181", "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs");
-                proj4.defs("EPSG:5181", "+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +towgs84=0,0,0,0,0,0,0 +units=m +no_defs");
-
-                proj4.defs("EPSG:4326", "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs");
-                ol.proj.proj4.register(proj4);
-
-                // 5181 : '+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=500000 +ellps=GRS80 +units=m +no_defs',
-                // 5185 : '+proj=tmerc +lat_0=38 +lon_0=125 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs',
-                // 5186 : '+proj=tmerc +lat_0=38 +lon_0=127 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs',
-                // 5187 : '+proj=tmerc +lat_0=38 +lon_0=129 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs',
-                // 5188 : '+proj=tmerc +lat_0=38 +lon_0=131 +k=1 +x_0=200000 +y_0=600000 +ellps=GRS80 +units=m +no_defs',
-                // 5174 : '+proj=tmerc +lat_0=38 +lon_0=127.0028902777778 +k=1 +x_0=200000 +y_0=500000 +ellps=bessel +units=m +no_defs +towgs84=-115.80,474.99,674.11,1.16,-2.31,-1.63,6.43',
-                // 5179 : '+proj=tmerc +lat_0=38 +lon_0=127.5 +k=0.9996 +x_0=1000000 +y_0=2000000 +ellps=GRS80 +units=m +no_defs',
-                // 4019 : '+proj=longlat +ellps=GRS80 +no_defs',
-            }
-        </script>
-    </body>
-</html>

+ 0 - 10
src/main/resources/static/index.html

@@ -1,10 +0,0 @@
-<!DOCTYPE html>
-<html lang="en">
-<head>
-    <meta charset="UTF-8">
-    <title>YONGIN ITS Operator System</title>
-</head>
-<body>
-    <h1>static/index.html</h1>
-</body>
-</html>

+ 6 - 6
src/main/resources/static/js/vworld/map-config.js

@@ -1,9 +1,9 @@
-// const _normalUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Base/{z}/{x}/{y}.png";
-// const _satelliteUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Satellite/{z}/{x}/{y}.jpeg";
-// const _hybridUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Hybrid/{z}/{x}/{y}.png";
-const _normalUrl = "/MAPDATA/YONGIN/Base/{z}/{x}/{y}.png";
-const _satelliteUrl = "/MAPDATA/YONGIN/Satellite/{z}/{x}/{y}.jpeg";
-const _hybridUrl = "/MAPDATA/YONGIN/Hybrid/{z}/{x}/{y}.png";
+const _normalUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Base/{z}/{x}/{y}.png";
+const _satelliteUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Satellite/{z}/{x}/{y}.jpeg";
+const _hybridUrl = "http://115.91.94.42:8080/MAPDATA/YONGIN/Hybrid/{z}/{x}/{y}.png";
+// const _normalUrl = "/MAPDATA/YONGIN/Base/{z}/{x}/{y}.png";
+// const _satelliteUrl = "/MAPDATA/YONGIN/Satellite/{z}/{x}/{y}.jpeg";
+// const _hybridUrl = "/MAPDATA/YONGIN/Hybrid/{z}/{x}/{y}.png";
 
 export class TMapConfig {
     constructor() {