From 32a60b1229c8589cc40ffcb920f737c50827dbc8 Mon Sep 17 00:00:00 2001 From: taesan Date: Tue, 10 Mar 2020 15:38:44 +0900 Subject: [PATCH] =?UTF-8?q?=EA=B3=B5=EC=97=B0=EC=A0=95=EB=B3=B4=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=EC=A0=95=EB=B3=B4=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=20=EA=B9=8C=EC=A7=80=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/boot/test1/config/SecurityConfig.java | 4 +- .../com/boot/test1/config/WebMvcConfig.java | 2 +- .../test1/controller/AccountController.java | 70 +++++++++++++++++-- .../src/main/webapp/WEB-INF/jsp/index.jsp | 8 ++- .../webapp/WEB-INF/jsp/performanceAPI.jsp | 8 ++- .../webapp/WEB-INF/jsp/performanceDetail.jsp | 65 +++++++++++++++++ .../main/webapp/WEB-INF/jsp/searchPage.jsp | 30 ++++++++ 7 files changed, 174 insertions(+), 13 deletions(-) create mode 100644 boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceDetail.jsp create mode 100644 boot_gradle_security/src/main/webapp/WEB-INF/jsp/searchPage.jsp diff --git a/boot_gradle_security/src/main/java/com/boot/test1/config/SecurityConfig.java b/boot_gradle_security/src/main/java/com/boot/test1/config/SecurityConfig.java index 8d7caf8..3f32763 100644 --- a/boot_gradle_security/src/main/java/com/boot/test1/config/SecurityConfig.java +++ b/boot_gradle_security/src/main/java/com/boot/test1/config/SecurityConfig.java @@ -30,16 +30,16 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter{ protected void configure(HttpSecurity http) throws Exception{ http .authorizeRequests() // 해당 메소드 아래는 각 경로에 따른 권한을 지정할 수 있다. - .antMatchers("/" , "/login" , "/service" , "/resources/**" , "/create").permitAll() // 로그인 권한은 누구나, resources파일도 모든권한 .antMatchers("/admin").hasRole("ADMIN") // 괄호의 권한을 가진 유저만 접근가능, ROLE_가 붙어서 적용 됨. 즉, 테이블에 ROLE_권한명 으로 저장해야 함. .antMatchers("/user").hasRole("USER") .antMatchers("/member").hasRole("MEMBER") + .antMatchers("/" , "/login" , "/service" , "/resources/**" , "/create").permitAll() // 로그인 권한은 누구나, resources파일도 모든권한 .anyRequest().authenticated() // 로그인된 사용자가 요청을 수행할 떄 필요하다 만약 사용자가 인증되지 않았다면, 스프링 시큐리티 필터는 요청을 잡아내고 사용자를 로그인 페이지로 리다이렉션 해준다. .and() .formLogin() // 하위에 내가 직접 구현한 로그인 폼, 로그인 성공시 이동 경로 설정 가능. , 로그인 폼의 아이디,패스워드는 username, password로 맞춰야 함 .loginPage("/login") // 로그인이 수행될 경로. .loginProcessingUrl("/loginProcess")// 로그인form의 action과 일치시켜주어야 함. - .defaultSuccessUrl("/loginSuccess") // 로그인 성공 시 이동할 경로. + .defaultSuccessUrl("/goHome") // 로그인 성공 시 이동할 경로. //.failureUrl("/login?error=true") // 인증에 실패했을 때 보여주는 화면 url, 로그인 form으로 파라미터값 error=true로 보낸다. , failureHandler 사용으로 불필요해졌다. .successHandler(successHandler) .failureHandler(failureHandler) diff --git a/boot_gradle_security/src/main/java/com/boot/test1/config/WebMvcConfig.java b/boot_gradle_security/src/main/java/com/boot/test1/config/WebMvcConfig.java index a214722..6ddcb02 100644 --- a/boot_gradle_security/src/main/java/com/boot/test1/config/WebMvcConfig.java +++ b/boot_gradle_security/src/main/java/com/boot/test1/config/WebMvcConfig.java @@ -17,7 +17,7 @@ public class WebMvcConfig implements WebMvcConfigurer { */ @Override public void addViewControllers(ViewControllerRegistry registry) { - registry.addRedirectViewController("/", "/login"); + registry.addRedirectViewController("/", "/goHome"); registry.setOrder(Ordered.HIGHEST_PRECEDENCE); } diff --git a/boot_gradle_security/src/main/java/com/boot/test1/controller/AccountController.java b/boot_gradle_security/src/main/java/com/boot/test1/controller/AccountController.java index 5902358..799aa5a 100644 --- a/boot_gradle_security/src/main/java/com/boot/test1/controller/AccountController.java +++ b/boot_gradle_security/src/main/java/com/boot/test1/controller/AccountController.java @@ -3,7 +3,9 @@ package com.boot.test1.controller; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; +import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; +import java.net.MalformedURLException; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; @@ -31,7 +33,7 @@ import com.boot.test1.vo.PerformanceInfo; public class AccountController { // 공용 API 사용을위한 발급 KEY - private String PERFORMANCE_KEY = "key값 노출되지 않도록 !"; + private String PERFORMANCE_KEY = "KEY 값 노출 없이.."; @Autowired AccountService accountService; @@ -73,7 +75,13 @@ public class AccountController { public String goPerformancePage() { return "/performanceSelectPage"; } - + + // 검색 조회 페이지로 이동. + @RequestMapping("/goSearchPage") + public String goSearchPage() { + return "/searchPage"; + } + // 공공API 호출, 공연정보 @RequestMapping("/performanceAPI") public String callAPI_performance(HttpServletRequest request) throws IOException { @@ -89,7 +97,7 @@ public class AccountController { urlBuilder.append("?" + URLEncoder.encode("ServiceKey","UTF-8") + "=" + PERFORMANCE_KEY); /*Service Key*/ urlBuilder.append("&" + URLEncoder.encode("sido","UTF-8") + "=" + URLEncoder.encode(sido, "UTF-8")); /**/ urlBuilder.append("&" + URLEncoder.encode("realmCode","UTF-8") + "=" + URLEncoder.encode(realmCode, "UTF-8")); /*코드*/ - urlBuilder.append("&" + URLEncoder.encode("cPage","UTF-8") + "=" + URLEncoder.encode("15", "UTF-8")); /*코드*/ + urlBuilder.append("&" + URLEncoder.encode("cPage","UTF-8") + "=" + URLEncoder.encode("1", "UTF-8")); /*코드*/ urlBuilder.append("&" + URLEncoder.encode("rows","UTF-8") + "=" + URLEncoder.encode("4", "UTF-8")); /**/ urlBuilder.append("&" + URLEncoder.encode("from","UTF-8") + "=" + URLEncoder.encode(from, "UTF-8")); /**/ urlBuilder.append("&" + URLEncoder.encode("to","UTF-8") + "=" + URLEncoder.encode(to, "UTF-8")); /**/ @@ -144,6 +152,8 @@ public class AccountController { int cPage = jsonResponseMsgBody.getInt("cPage"); log.info(" totalCount : " + totalCount + ", maxPage : " + maxPage + " lastpageNum : " + lastPageNum); + + log.info( " jsonResponseMsgBody : " + jsonResponseMsgBody.toString()); if ( totalCount == 0 ) { log.info(" 해당 조건에 맞는 공연정보가 존재하지 않습니다."); @@ -167,7 +177,7 @@ public class AccountController { } } - request.setAttribute("performanceInfo", performanceInfo); + request.setAttribute("performanceInfos", performanceInfo); } return "performanceAPI"; } @@ -187,6 +197,58 @@ public class AccountController { return info; } + + @RequestMapping("/goDetail") + public String detail(HttpServletRequest request, int seq) throws IOException { + + log.info(" seq : " + seq ); + + StringBuilder urlBuilder = new StringBuilder("http://www.culture.go.kr/openapi/rest/publicperformancedisplays/d/"); /*URL*/ + urlBuilder.append("?" + URLEncoder.encode("ServiceKey","UTF-8") + "=" +PERFORMANCE_KEY); /*Service Key*/ + urlBuilder.append("&" + URLEncoder.encode("seq","UTF-8") + "=" + URLEncoder.encode(String.valueOf(seq), "UTF-8")); /**/ + + URL url = new URL(urlBuilder.toString()); + HttpURLConnection conn = (HttpURLConnection) url.openConnection(); + conn.setRequestMethod("GET"); + conn.setRequestProperty("Content-type", "application/json"); + System.out.println("Response code: " + conn.getResponseCode()); + BufferedReader rd; + + if(conn.getResponseCode() >= 200 && conn.getResponseCode() <= 300) { + rd = new BufferedReader(new InputStreamReader(conn.getInputStream())); + } else { + rd = new BufferedReader(new InputStreamReader(conn.getErrorStream())); + } + + StringBuilder sb = new StringBuilder(); + String line; + + while ((line = rd.readLine()) != null) { + sb.append(line); + } + + rd.close(); + conn.disconnect(); + System.out.println(sb.toString()); + + JSONObject jsonObject = XML.toJSONObject(sb.toString()); + JSONObject jsonResponse = jsonObject.getJSONObject("response"); + JSONObject jsonResponseMsgBody = jsonResponse.getJSONObject("msgBody"); + + JSONObject perforInfo = (JSONObject)jsonResponseMsgBody.get("perforInfo"); + + request.setAttribute("title", perforInfo.get("title")); + request.setAttribute("startDate", perforInfo.getInt("startDate")); + request.setAttribute("endDate", perforInfo.getInt("endDate")); + request.setAttribute("place" , perforInfo.get("place")); + request.setAttribute("area", perforInfo.get("area")); + request.setAttribute("price", perforInfo.get("price")); + request.setAttribute("phone", perforInfo.get("phone")); + request.setAttribute("imgUrl", perforInfo.get("imgUrl")); + request.setAttribute("placeUrl", perforInfo.get("placeUrl")); + + return "performanceDetail"; + } // goHome @RequestMapping("/goHome") diff --git a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/index.jsp b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/index.jsp index 9a0bdc3..55a52df 100644 --- a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/index.jsp +++ b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/index.jsp @@ -10,9 +10,11 @@
-

-Use JqGrid

-Use 공연정보 API

+ +Use JqGrid
+Use 공연정보 API
+Use 검색 API
+
diff --git a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceAPI.jsp b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceAPI.jsp index a93b7d2..48cf507 100644 --- a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceAPI.jsp +++ b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceAPI.jsp @@ -29,10 +29,11 @@

공연정보

- + + @@ -40,9 +41,10 @@ - + + @@ -50,7 +52,7 @@ - +
thumbnail seq title startDateplace realmName areathumbnail상세
${row.seq} ${row.title} ${row.startDate}${row.place} ${row.realmName} ${row.area}Detail
diff --git a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceDetail.jsp b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceDetail.jsp new file mode 100644 index 0000000..750315f --- /dev/null +++ b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/performanceDetail.jsp @@ -0,0 +1,65 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ page import="org.json.*"%> + +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%> + + + + + + +Main Page + + + + + + + + + + + + +
+
+
+ + +

공연정보

+ + + + + + + + + + + + + + + + + + + + + + + + +
+
imgUrltitlestartDateendDateplacearea가격연락처placeUrl
${title}${startDate}${endDate}${place}${area}${price}${phone}${placeUrl}
+ + +
+
홈 화면으로가기
+

+
+
+ + \ No newline at end of file diff --git a/boot_gradle_security/src/main/webapp/WEB-INF/jsp/searchPage.jsp b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/searchPage.jsp new file mode 100644 index 0000000..9448f76 --- /dev/null +++ b/boot_gradle_security/src/main/webapp/WEB-INF/jsp/searchPage.jsp @@ -0,0 +1,30 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> + + + + +Main Page + + + + + + + + + + + + + + + + + + +
+

여기는 searchPage 입니다.

+
+ + + \ No newline at end of file