본문 바로가기

Java

Using IntelliJ File Template Using IntelliJ FileTemplate. 프로젝트를 진행하다 보면, 동일한 Template의 파일을 여럿 작성하게 된다.예를 들면, 아래와 같은 경우이다.공통 코드를 조회하는 RestController이다.CommonCodeRestController.javaimport org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.RestController;import project.pilot.api.common.base.BaseController;@RestController public class CommonCodeRestController extends BaseRestC.. 더보기
Spring Security SessionDestroyListener 스프링 시큐리티에서 세션 디스트로이 이벤트 전후작업 하기. 사용자가 로그아웃할때, 로그를 남겨야한다는 요구사항이 들어왔다. 사용자가 로그아웃 버튼을 클릭해서 로그아웃을 하면, SimpleUrlLogoutSuccessHandler를 상속받아 onLogoutSuccess 메서드를 구현해서 처리할 수 있다. @Override public void onLogoutSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException { // 전 작업 super.onLogoutSuccess(request, response, authenticatio.. 더보기
Spring Security 로그인 성공 혹은 실패 후 부가 작업 하기. 요구사항. 로그인을 5번 이상 실패하면 계정 잠금 처리. 먼저 사용자 테이블에 로그인 실패 건수를 업데이트할 컬럼을 생성한다. 로그인이 실패하면, 해당 컬럼에 +1 건을 추가하고, 로그인을 성공하면, 0으로 초기화 해주는 로직을 넣어보려고 한다. 스프링 시큐리티를 사용하며, 로그인 성공시 부가 작업을 하려면, org.springframework.security.web.authentication.AuthenticationSuccessHandler를 구현해야 한다. 별도로 authenticationSuccessHandler를 지정하지 않으면 기본적으로 org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler를 사.. 더보기
MyBatis에서 프로시져 호출하기. MyBatis에서 프로시져를 호출할때, 아래와 같은 오류가 출력된다면.. 매개 변수 번호 0에 값이 설정되지 않았습니다. MyBatis의 tag에 statementType="CALLABLE" 이 설정되어 있는지 확인하자. 더보기
ToStringStyle.MULTI_LINE_JSON_STYLE Apach CommonLang의 ToStringBuilder를 많이 사용한다. 그런데, 꼭 있을것만 같은 MULTI_LINE_JSON_STYLE이 존재하지 않는다. 그래서 Custom Style을 하나 만들어봤다. 내가 만들고 싶은 스타일은.. 기본적으로 JSON_STYLE 과 MULTI_LINE_STYLE을 합치면서, 또한 null 값은 포함하지 않도록 하고 싶었다. 그렇게 완성한 Custom Style은 아래와 같다. import org.apache.commons.lang3.SystemUtils; import org.apache.commons.lang3.builder.ToStringStyle; /** * @author Jason, Moon * @since 2018-03-15. */ public cla.. 더보기
MyBatis에서 Paging 처리 하기. MyBatis를 통해서 Paging 처리 하기. (MS-SQL 2012 이상) 최근 진행중인 프로젝트를 마무리 해가며, 뒤로 뒤로.. 미뤄둔 공통 Paging 작업을 처리했다.반영할 운영서버에서는 MS-SQL을 사용하고 있었고, 버전은 2016으로 최신버전이었다. MS-SQL에서 페이징을 처리하는 방법은 크게 2가지로 요약할 수 있다고 한다. 1. ROW_NUMBER 함수를 이용하는 방법.서브 쿼리에서 ROW_NUMBER 함수를 이용해 행번호를 할당하고, 상위 쿼리에서 이를 기준으로 필터링하는 방법이다.대략 아래와 같은 구조를 가지게 된다.SELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY ..) AS ROW_NUM, ... ) WHERE ROW_NUM BETWEEN.. 더보기
Thymeleaf에서 날짜 관련 Utility 사용하기. Thymeleaf를 사용할때, 개발자는 꽤 많은 유틸리티를 사용할 수 있다. 그 중, 날짜 관련 유틸인 #dates 는 java.utils.Date 오브젝트를 위한 유틸리티이다. 아래와 같은 표현식을 사용할 수 있다. Dates#dates : utility methods for java.util.Date objects:/* * ====================================================================== * See javadoc API for class org.thymeleaf.expression.Dates * ====================================================================== */ /* * For.. 더보기
MyBatis 설정 오류. MyBatis를 설정하다 보니, 아래와 같은 오류를 발견했다. The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".이 오류는, MyBatis의 Configuration 엘리먼트의 자식으로 설정되는 엘리먼트들의 순서가 잘못되었다는 오류이다. 오류 메세지에서 보이는대로, 순서를 수정해주면 오류를 해결 할 수 있다. 더보기
IP 주소를 체크하는 정규 표현식. 문자열이 IP(0.0.0.0 ~ 255.255.255.255) 범위 안에 있는지 확인하기 위한 정규 표현식.. String ip1 = "127.0.0.1"; String ip2 = "255.255.255.255"; String ip3 = "255.255.255.256"; String ipRegex = "(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d{1,2}|1\\d\\d|2[0-4]\\d|25[0-5])"; System.out.println(ip1.matches(ipRegex)); System.out.println(ip2.matches.. 더보기
Spring Security, 현재 사용자 정보 가져오기. 보통의 Entity(JPA에서의..)는 등록사용자ID, 등록일자를 가지게 된다.package kr.co.xfilegolf.sale; import kr.co.xfilegolf.SecurityUtils; import lombok.Data; import javax.persistence.*; import java.time.LocalDate; import java.time.LocalDateTime; /** * @author jason, Moon * @since 2016-10-09 */ @Entity @Table(name = "SALE") @Data public class Sale { @Id @GeneratedValue @Column(name = "ID") private Long id; @Column(name = .. 더보기