728x90
반응형

 

Spring Boot 의 기본 템플릿 엔진은 Thymeleaf 로 사용되고 있습니다.

 

Jpa 의 저장 또한 LocalDateTime 으로 아래처럼 사용하고 있습니다.

 

 

 

일반적인 방법으로는 java.util.date 객체를 사용하고 있지만 Java8 에서는 LocalDateTime 을 사용하도록 권장하고 있기때문에 Format 방식도 조금 다르게 진행합니다.

 

그래서 간단하게 Thymeleaf 3.0에서 Format하는 방식을 설명하겠습니다.

 

백엔드에서 아래와같이 model로 넘기는 가정으로 진행하겠습니다.

 

model.addAttribute("standardDate", new Date());

model.addAttribute("localDateTime", LocalDateTime.now());

model.addAttribute("localDate", LocalDate.now());

model.addAttribute("timestamp", Instant.now());

 

 

 

 

날짜  어떻게 백엔드쪽에 설정 되었는지에 상관없이 , 그것은 선택된 표준에 따라 보여 질 것입니다. 

 

standardDate는 #에 의해 처리 될 것입니다 날짜 유틸리티입니다. 새로운 LocalDateTime, LocalDate  Instant 클래스는 # temporals 유틸리티에 의해 처리됩니다 . 

 

<h1>Format ISO</h1>

<p th:text="${#dates.formatISO(standardDate)}"></p>

<p th:text="${#temporals.formatISO(localDateTime)}"></p>

<p th:text="${#temporals.formatISO(localDate)}"></p>

<p th:text="${#temporals.formatISO(timestamp)}"></p>

 

 

 

자동으로 하지 않고 원하는 format을 설정하는 방식입니다.

 

<h1>Format manually</h1>

<p th:text="${#dates.format(standardDate, 'dd-MM-yyyy HH:mm')}"></p>

<p th:text="${#temporals.format(localDateTime, 'dd-MM-yyyy HH:mm')}"></p>

<p th:text="${#temporals.format(localDate, 'MM-yyyy')}"></p>

 

 

 

 

 

# temporals.format (...)을 사용 하여 Instant 클래스를 처리 할 수 ​​없습니다 . 

 

UnsupportedTemporalTypeException 이 발생 합니다. 또한 LocalDate의 서식 지정은 특정 날짜 필드 만 지정하고 시간 필드를 건너 뛰는 경우에만 가능합니다.

 

자세한 설명은 아래의 url을 통해 확인하실수 있습니다.

 

https://www.baeldung.com/dates-in-thymeleaf

 

How to Work with Dates in Thymeleaf | Baeldung

A quick and practical guide to working with dates in Thymeleaf

www.baeldung.com

728x90
반응형
728x90
반응형

 

새로운 Android Studio 버전을 설치 하였거나 포멧을 한 뒤에 기존에 NDK를 사용하던 프로젝트를 열고 빌드 했을때 아래와 같은 에러메시지가 출력됬습니다.

 

 

 

진짜 안드로이드 에러는 검색말고는 절대 혼자 해결할 수 없는것 같네요.

 

문제는 NDK 관련 SDK 설치가 되어있지 않아서 발생된 오류로 NDK 를 설치해서 처리해보도록 하겠습니다.

 

Android Studio 메뉴에서 Preferences 로 이동합니다.

 

 

 

Appearance & Behavior > System Settings > Android SDK 메뉴를 클릭합니다.

 

우측 화면에서 SDK Tools 탭을 클릭하면 아래와 같은 화면이 나옵니다.

 

 

CMake 와 NDK 가 설치되지 않아 설치를 진행하였습니다.

 

 

 

NDK 버전이 높으면 Gradle 버전도 높아져야 하기 때문에 상황에 맞게 대처를 해야될것같습니다.

 

위와 같은 방법으로도 처리가 안될 수 있으니 에러로그를 천천히 살펴 보시기 바랍니다.

728x90
반응형
728x90
반응형

 

Spring Boot 2.x 로 개발을 하다보면 어마어마한 문제들이 많이 발생합니다.

 

최근 보안정책을 준수하기 때문에 일반적으로 사용이 가능한 부분들도 보안취약점으로 구분되기도 하죠.

 

이번에도 VirtualKeypad 사용하는 프로젝트에서 Spring Security 를 적용하면서 생긴 문제를 해결했습니다.

 

https://gigas-blog.tistory.com/100

 

WebPonent Virtual Key - HTML 보안 키패드

웹과 하이브리드 앱에서 사용할 수 있는 보안키패드를 소개하겠습니다. HTML 기반으로 다양한 환경에서 사용이 가능하다는 장점이 있는 VirtualKey 입니다. 주민번호를 입력하는곳과 비밀번호 등 개인정보에 민감..

gigas-blog.tistory.com

 

 

 

VirtualKeypad 는 html 기반으로 iFrame 을 띄우는 방식으로 만들어진 솔루션입니다.

 

하지만 Security 적용을 하니 아래와 같은 오류들이 뿜어져나왔습니다.

 

 

Refused to display 'http://localhost:9050/keypad/keypad-core.html' in a frame because it set 'X-Frame-Options' to 'deny'.

 

Uncaught DOMException: Blocked a frame with origin "http://localhost:9050" from accessing a cross-origin frame.

 

X-Frame-Options'를 'deny'로 설정 했기때문에 keypad-core.html 프레임 표시를 거부했다고 나오고,

 

Uncaught DOMException : 원본 "http : // localhost : 9050"이 교차 출처 프레임에 액세스하지 못하도록 프레임을 차단했다고 나옵니다.

 

 

 

 

이런저런 에러를 보다보니 정말 많은 경험이 되는것 같습니다..

 

CrossOrigin 이라는것도 찾아보고. Cors설정도 찾아봤지만 어떤 문제인지 확인조차 어려워서 이설정은 아닌것같아 첫번째 오류메시지 기준으로 찾아보기 시작했습니다.

 

'X-Frame-Options' to 'deny'. 이 부분을 처리 해줘야하는데 DOMException 이 나와서 javascript 문제인줄 알고 VirtualKeypad 설정 js 파일을 찾아보았지만 없었습니다.

 

다시 원점으로 돌아가 Spring Security 적용전에는 문제 없이 되었으니 Spring Security 설정으로 가능할거라는 생각으로 다시 검색을 했습니다.

 

찾아보니 Spring Security 는 기본적으로  X-Frame-Options Click jacking 공격 막기 설정이 되어있습니다.

 

iFrame 을 사용하기 때문에 설정이 해주어야 합니다.

 

 

 

 

 

Xml 로 설정도 가능하지만 SpringBoot 에서는 Java로 구성하기 때문에 Java 로 작성합니다.

 

Spring Security 설정을 하는 WebSecurityConfigurerAdapter.configure(HttpSecurity http) 메서드에 작성을 하겠습니다.

 

X-Frame-Options 를 비활성화 하는 설정이지만 보안적인 이슈가 발생할 수 있습니다.

 

http.headers().frameOptions().disable();

 

 

 

동일 도메인에서는 iframe 접근이 가능하도록 X-Frame-Options를 sameOrigin() 으로 설정하면 됩니다.

 

http.headers().frameOptions().sameOrigin();

 

 

 

Java로 간단하게 설정이 가능하지만 Spring Boot 에서는 강력한 properties 파일로 설정이 가능합니다.

 

security.headers.frame = false

 

 

 

 

이 설정 하나로 iFrame 사용하는 프로젝트에서 문제없이 진행할 수 있습니다.

 

728x90
반응형

+ Recent posts