Develop 111

[Thymleaf 타임리프] form post 전송 시 403 forbidden 에러 해결

Spring Security 사용 시 CSRF 토큰값을 보내줘야지 정상인증 처리가 됩니다.그렇지 않으면 위변조 공격이라고 판단해서 에러가 발생 됩니다. CSRF(Cross-Site Request Forgery)란?사이트 간 요청 위조라는 의미로, 다른 오리진을 가진 사이트에서 form 요청을 보내는 것입니다. 자세하게는 일반 사용자가 악의적인 공격자에 의해 '등록, 수정, 삭제' 등의 행위를 특정 웹사이트에 요청하도록 만드는 공격입니다. ▶ 403 forbidden 오류 발생 예시 HTTP Status 403 – ForbiddenType Status ReportDescription The server understood the request but refuses to authorize it...

Develop 2024.09.15

[Spring Framework] Spring boot 2개 실행했을 때 로그인 세션 끊기는 현상 해결하기

보통 로컬에서 개발할때 관리자, 사용자 2개 사이트를 동시에 실행하는 경우가 많습니다서버를 두개 실행할 경우 만약 사용자에서 로그인하면 관리자에서 로그인한 세션이 끊기는 현상이 발생합니다.이럴 session cookie name 을 다르게 지정해 주시면 됩니다. ▶ application.yml 파일 수정 시 server: servlet: session: cookie: name : ANPBOSESSIONID ▶ application.properties 파일 수정 시server.servlet.session.cookie.name = ANPBOSESSIONID

Develop/JAVA 2024.09.14

[타임리프 Thymeleaf] 반복문 while 같은 단순반복 처리

#numbers.sequence 를 사용해서 원하는 반복 횟수만큼 실행시킬 수 있다.  ▶ from 에서 to 까지 순차적으로 반복한다. step 은 증가 수를 지정할 수 있다. 없으면 1 씩 증가한다./* Create a sequence (array) of integer numbers going from x to y */${#numbers.sequence(from,to)}${#numbers.sequence(from,to,step)} ▶ 1부터 scrtPrd.ordUnitBnbx 수만큼 반복한다.  ▶ 반복상태변수 사용 예제

Develop 2024.09.11

[javascript] jquery selector 선택자 like 로 찾기

jqeury 로 셀렉터 선택자에 접근할 때 문자열 존재여부로 찾기태그의 attr 속성값을 유동적으로 생성할 때 활용할 수 있다. ▶ input 의 name 이 'selector' 와 일치하는 요소$("input[name='selector']") ▶ input 의 id 가 'selector' 로 시작하는 요소 (like 'selector%')$("input[id^='selector']") ▶ input 의 name 에 'selector' 가 포함된 요소 (like '%selector%')$("input[name*='selector']") ▶ input 의 id 가 'selector' 로 끝나는 요소 (like '%selector')$("input[id$='selector']")

Develop 2024.09.10

[JAVA] dto model 특정값 중복 제거 합치기 stream filter distinct sort

JAVA List model 데이터에서 특정 컬럼을 기준으로 중복되는 데이터를 합치고 싶을 때 사용// 장바구니 상품 목록 조회 ScrtPrdInfrDto scrtPrdInVo = new ScrtPrdInfrDto();scrtPrdInVo.setAnpMbrNo(mbrDto.getAnpMbrNo());scrtPrdInVo.setAnpPrslTpCd("01");List scrtPrdList = scrtService.getScrtPrdInfrList(scrtPrdInVo); List scrtPrdList 값에서 getAnpDispMdclCd, getAnpDispMdclCdNm 두 개 컬럼을 기준으로 중복데이터를 합칩니다. import java.util.ArrayList;import java.util.List;..

Develop/JAVA 2024.09.10

[Javascript] 스크롤 div 밑에 영역 감지해서 이벤트 발생시키기

화면에서 특정 div 영역에서 상품들이 나열되어 있을 때 추가로 상품을 append 해야 하는대 스크롤이 해당 상품 리스트 영역의 하단에 왔을 때 이벤트를 발생시켜서상품을 추가하고 싶을 때 사용 영역들이 여러개 존재할 수 있고 유동적으로 생성될때도 적용할 수 있게 구성data-prdappendyn="N" 는 추가적으로 더 이벤트를 발생시킬지 여부를 판단. 상황에 따라 추가할 내용이 없으면 값을 변경 ... 상품들 ... ... 상품들 ... ... 상품들 ..

Develop 2024.09.06

[Thymeleaf 타임리프] ModelAndView 리턴페이지에서 특정 id 영역만 변경하고 싶을 때

spring framework 의 java controller 에서 리턴페이지를 지정해 줄 때 특정 id 영역만 변경하게 할 수 있습니다.예를 들면 리스트페이지에서 검색 버튼을 클릭 하면 리스트영역만 변경되고 다른 검색조건의 영역은 리플레쉬 하고 싶지 않을 때활용할 수 있습니다. @GetMapping({"/edu200/edu200100", "/edu200/edu200100/srch"}) 으로 2개의 url 이 같은 메소드로 매핑되게 합니다. 첫번째는 페이지 최초 로드시 호출할 url 이고 두번째 url 은 호출된 페이지에서 검색버튼을 클릭했을 때 호출할 url 입니다.String requestUrl = (String)request.getAttribute(HandlerMapping.PATH_WITHIN_H..

Develop 2024.09.05

[Mybatis] PK 를 count 혹은 max 쿼리로 생성 후 리턴받기

insert 쿼리에서 pk 를 count 나 max 쿼리에 +1 을 하는 형태가 있을 수 있다.이때 만들어진 pk 값을 다른 상세테이블이나 연계 테이블에 사용해야할 경우 리턴받아야 한다. ▶ selectKey 를 사용해서 pk 로 사용할 쿼리를 작성 한다. - resultType 은 데이터형태를 지정한다.  - keyProperty 는 받을 변수명이다 parameterType 의 model 파일에 존재해야 한다.  - order 는 쿼리 실행전인지 실행후인지를 결정한다. after 는 당연히 실행후겠죠 SELECT F_COMMON_DOCNO('od_order_mst') INSERT INTO od_order_mst (ord_no, s..

Develop 2024.09.03

[Mybatis] 반복되는 같은 쿼리 sql 로 정의해서 include 해서 변수처럼 사용하기

mybatis 로 쿼리를 작성하다보면 동일한 쿼리가 여러곳에 들어가는 경우가 생긴다특히 postgresql 로 보면 with 같은 쿼리는 여러곳에서 반복적으로 사용할 수 있다. 그럴때 마다 같은 쿼리를 매번 작성하기 보단변수처럼 sql 로 정의해서 include 해서 사용하면 효율적이다.  상단에 with 쿼리를 anpdsmDispCat_with_adc 로 정의하고  를 사용해 쿼리를 불러올 수 있다. 물론 서비스의 파라미터도 사용할 수 있다.  주의할점) include 하는 곳보다 상단에 위치할 것.  WITH RECURSIVE adc (anp_disp_cat_cd, upp_anp_disp_cat_cd, disp_cat_nm, disp_cat_thmb_bimg_file_url, clr_infr_i..

Develop 2024.09.03

[Flutter 플러터] SafeArea 위젯 간단 설명과 사용법

핸드폰의 종류는 너무나 다양하게 각양각색 입니다. 디바이스의 종류도 많고 물리적인 모양도 다르고 디스플레이 규격도 다릅니다.특히 상단 혹은 하단에 어떤 영역을 배치할때 물리적인 디바이스 모양에 따라 짤리거나 들어가거나원하지 않는 모양으로 보일 수 있습니다.  SafeArea 위젯은 이런 iPhone의 노치나 디스플레이의 다른 창의적인 물리적 특징을 피하는 데 필요한 양만큼 패딩을 줘서 사용자가 보여지기에 문제가 없게 자동으로 처리해 줍니다. ▶ SafeArea 위젯을 사용 하지 않았을 때 // 옵션 보여주기void _showOptions(BuildContext context, String messageId, String userId) {showModalBottomSheet( context: cont..

Develop/Flutter 2024.09.01