윈도우 환경에서 ssh key를 생성하기 위한 방법은 다음과 같다. (사용자폴더/.ssh 가 없으면 생성이 안된것이다.) 위와 같이 ssh-keygen 을 통해서 생성을 할 수 있다. 특정한 경로에 설정하지 않을거라면 묻는 말에 모두 엔터로 응수해준다. 그럼 위와 같이 ramdomart image까지 나오며 ssh key가 생성이 된다. 생성된 .ssh 폴더 안에는 id_rsa라는 private_key와 id_rsa.pub라는 public_key가 생성되었다. 끝!
web 서버에서 간단히 id/pw 정보를 통해 인증을 하듯 Spring Security에서도 '약속된 계정'을 통해 인증을 할 수 있다. DB로부터 사용자 정보를 가지고 와서 하는 인증 개념은 아니고 최소한의 인증이라고 생각하면 된다. 하는 방법과 계정을 설정하는 방법에 대해서 알아보도록 하겠다. pom.xml (maven) org.springframework.boot spring-boot-starter-security pom.xml 에 위와 같이 spring-boot-starter-security dependency를 추가해주자. 끝이다. dependency만 추가해도 Spring Security에서 제공하는 가장 기본적인 인증이 바로 적용된다. 물론 custom loginform을 이용해서 로그인을 ..
project 소스를 Sonarqube로 분석을 해보니 다음과 같은 조치내역이 발견되었다. Make field transient or serializable! 이 필드를 직렬화에서 제외 시키거나 직렬화를 시킬수 있도록 하라! 라고 해석할 수 있다. 하지만 dataRows라는 필드는 사용이 되어야 해서 transient를 하는 상황은 제외하도록 하겠다. (transient 를 사용하면 직렬화할때 해당 필드를 제외하므로 역직렬화시 필드값이 null이 들어간다.) 이 소스를 클래스 정의 부분까지 확장시켜보면 다음과 같다. public class ProjectDataset implements Serializable { private static final long serialVersionUID = -434333..
ApplicationContext를 Util 클래스에서 가지고 와서 사용을 하고 싶었다. 그래서 다음과 같이 ApplicationContextAware를 impl하여 ApplicationContextProvider를 만들었다. @Component public class ApplicationContextProvider implements ApplicationContextAware { private static ApplicationContext applicationContext; @Override public void setApplicationContext(ApplicationContext ctx) throws BeansException { applicationContext = ctx; } public st..
파일 다운로드 시 보통 다음과 같은 로직을 구현한다. ... response.reset(); response.setContentType("application/octet-stream"); response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\";"); response.setHeader("Content-Length", String.valueOf(destFile != null ? destFile.length() : 0)); ... 이렇게 했을 때 4번째줄에 나오는 fileName은 클라이언트로부터 넘어온 파일의 정보 중 파일이름이다. 파일 이름을 추출하여 Content-Disposition 값으로 그대로 넣으면 한..
Stream 관련 기능을 사용하다 보면 가끔 겪는 증상이다. java.io.IOException: Stream Closed at java.base/java.io.FileOutputStream.writeBytes(Native Method) at java.base/java.io.FileOutputStream.write(FileOutputStream.java:349) at java.base/java.io.BufferedOutputStream.write(BufferedOutputStream.java:123) at java.base/java.io.FilterOutputStream.write(FilterOutputStream.java:108) 결론부터 얘기하자면 이 오류의 원인은 내용 그대로 Stream으로 뭘 써..
이클립스에서 프로젝트 import시 다음과 같은 오류가 발생하며 import가 정상적으로 안된다. Failed to read the project description file (.project) for 'project명'. The file has been changed on disk, and it now contains invalid information. The project will not function properly until the description file is restored to a valid state. 해결책 이클립스 (or STS)의 workspace > .metadata > .plugins > org.eclipse.core.resources 폴더를 삭제한다. 그리고 이클립스를..
Sonarqube로 소스 분석 결과를 보다가 다음과 같은 지적을 받았다. 이게 왜 문제가 된다는거고 심지어 Critical인가?? finally에서 자원 해제도 잘 했는데 왜?? java7 이후부터는 위의 방식처럼 자원을 열고 자원 해제를 위해 finally에서 닫아주고 하는 방식이 아니라 다음과 같이 사용하는 방법을 권고한다고 한다. try ( FileReader fr = new FileReader(fileName); BufferedReader br = new BufferedReader(fr) ) { return br.readLine(); } catch (...) {} 즉 try 안에 FileReader, BufferedReader와 같이 자원과 관련된 객체를 만들어 주면 된다. 이렇게 하면 final..