스프링 9

Spring 설정 중 properties파일 xml에서 이용하기

XML파일에서 db나 smtp, aws 설정 등을 해주게 되면 개인정보가 git 등에 노출되지 않도록 조심해야 한다 이 경우 properties파일을 이용한다. properties파일을 사용해야 하는 xml에서 이를 넣어주면 모든 properties파일을 읽어온다. 이번 프로젝트에서는 db와 mail 관련한 정보들을 properties에 넣었다. db.properties db.url=jdbc:oracle:thin:@localhost:1521:xe db.username=db유저이름 db.password=비밀번호 mail.properties mail.username=내아이디@naver.com mail.password=내비밀번호 그리고 사용하려는 xml로 돌아오면... true true true UTF-8 s..

개발 2023.09.24

스프링 시큐리티 컨트롤러에서 로그인한 customUser 받아오기

컨트롤러에서 마이 페이지를 조회하는 경우 위와 같이 Principal을 이용해 지금 로그인한 유저의 정보를 받아왔는데, 이때 principal.getName()으로 아이디를 받아오고 이 아이디로 또 dao에서 회원 정보를 조회하는 방식이 조금 이상하게 느껴졌다. 세션을 쓸까 했는데 시큐리티를 쓰는 거 시큐리티에도 분명히 방법이 있을텐데 해서 찾아봤다 https://itstory.tk/entry/Spring-Security-%ED%98%84%EC%9E%AC-%EB%A1%9C%EA%B7%B8%EC%9D%B8%ED%95%9C-%EC%82%AC%EC%9A%A9%EC%9E%90-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0 [Spring Security] 현재..

개발 2023.02.02

[에러일기]connection to 'ws://localhost:8090/chat' failed: Error during WebSocket handshake: Unexpected response code: 200

진심 너무 괴상한 에러였다 웹소켓 실습을 하는 중 크롬 브라우저개발자 도구에서 계속 connection to 'ws://localhost:8090/chat' failed 다음과 같은 에러를 만났다. 혹시 크롬의 문제일까 싶어서 엣지 브라우저로 해봤더니 connection to 'ws://localhost:8090/chat' failed: Error during WebSocket handshake: Unexpected response code: 200 뭔가 에러메시지가 더 추가됨 200에러...? https://okky.kr/articles/447166 OKKY - spring 웹소켓 자바스크립트에서 객체생성중 200오류 $(document).ready(function(){ send_message(); }..

개발 2023.01.24

@PreAuthorize("isAuthenticated()") not working

로그인을 한 회원, 즉 인증된 회원만이 글쓰기 페이지에 접근할 수 있게 하기 위해서 @PreAuthorize 어노테이션을 사용했지만 실제로 프로젝트를 구동시키면 해당 어노테이션이 작동하지 않아, 로그인 여부와 상관없이 글쓰기 페이지로 넘어가졌다. @GetMapping("/register") @PreAuthorize("isAuthenticated()") public void register() { System.out.println("register컨트롤러"); } 찾아보니 다음 어노테이션을 사용하기 위해서는 servlet-context.xml에 다음과 같이 설정을 해주어야 한다고 한다. 위처럼 설정해준 후 다시 프로젝트를 구동시켜보니 권한이 없는 상태에서 /register로 이동하면 이렇게 로그인을 하라는..

개발 2023.01.24

[에러일기]BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext

스프링 시큐리티를 설정 후 프로젝트를 구동했더니 에러가 발생했다. BeanFactory not initialized or already closed - call 'refresh' before accessing beans via the ApplicationContext 원인은 web.xml에 정의해둔 spring-security.xml의 경로가 틀려서 그렇다. contextConfigLocation /WEB-INF/spring/root-context.xml /WEB-INF/spring/security-context.xml 경로를 올바르게 바꿔주니 잘 작동했다.

개발 2023.01.12

@RestController

REST는 'Representational State Transfer'의 약어로 하나의 URI는 하나의 고유한 리소스를 대표하도록 설계된다는 개념에 전송방식을 결합해서 원하는 작업을 지정한다. @RestController는 JSP와 달리 순수한 데이터를 반환하는 형태이므로 다양한 포맷의 데이터를 전송할 수 있다. 주로 많이 사용하는 형태는 일반 문자열이나 JSON, XML 등을 사용한다. 기존의 @Controller는 문자열을 반환하는 경우에는 JSP파일의 이름으로 처리하지만, @REstController의 경우에는 순수한 데이터가 된다. REST방식으로 호출하는 경우는 화면 자체가 아니라 데이터 자체를 전송하는 방식으로 처리되기 때문에 데이터를 요청한 쪽에서는 정상적인 데이터인지 비정상적인 데이터인지를..

개발 2023.01.11

@InitBinder를 통한 파라미터 변환

파라미터의 수집을 binding이라고 한다. 변환이 가능한 데이터는 자동으로 변환되지만 경우에 따라서는 파라미터를 변환해서 처리해야 하는 경우도 있다. 예를 들어, 화면에서 '2018-01-01'과 같이 문자열로 전달된 데이터를 java.util.Date타입으로 변환하는 작업이 있다. 스프링 컨트롤러에서는 파라미터를 바인딩할 때 자동으로 호출되는 @InitBinder를 이용해서 이러한 변환을 처리할 수 있다. package kr.or.kosa.dto; import java.util.Date; import lombok.Data; @Data public class TodoDto { private String title; private Date dueDate; } 다음과 같은 DTO가 있다. package k..

개발 2023.01.10

우리 팀을 위한 설정 정리

스프링 레거시 프로젝트 설정 정리 pom.xml은 생략 /WEB-INF/views/ .jsp root-context.xml 스프링이 로딩되면서 읽어 들이는 문서. 이미 만들어진 클래스들을 이용해 스프링의 빈으로 등록할 때 사용된다. String으로 뷰 이름을 반환할 경우 이를 실제 뷰와 연결해주는 View Resolver 커넥션 풀인 HikariCP (DataSource를 통해 매번 데이터베이스와 연결하는 방식이 아닌, 미리 연결을 맺어주고 반환하는 구조) SQL을 좀 더 빠르게 처리하도록 돕는 MyBatis -자동적으로 Connection close() 가능. 내부적으로 PreparedStatement 처리. 리턴타입을 지정하는 경우 자동으로 객체 생성 및 ResultSet 처리 -가장 핵심적인 객체는..

개발 2023.01.10