본문 바로가기

IT 개발/Spring

(5)
AOP를 사용한 로그 DB에 저장(코드포함) 이전에도 포스팅을 짧게 했었습니다.https://chobi-meow.tistory.com/12위에서는 너무 간단하게 방식정도와 간단한 어노테이션 개념정도만 정리해서 좀 더 정리가 필요할듯 하여한번 더 포스팅하려고 합니다.로그를 보통 logback.xml 로 서버로그에 담기도록 하는게 보통이지만DB에 저장하는 방식을 정리해보려고 합니다.@Entity@Getter@Builder@DynamicInsert@DynamicUpdate@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructor@Table(name = "user_action_log")@AttributeOverride(name = "id", column = @Column(name = "id..
@Scheduled Open API사용하여 공휴일 DB 적재하기 달력 구현하는중에 토요일과 일요일은 자동으로 확인되지만..비정기적으로 있는 음력으로 세어지는 공휴일의 경우, 체크구현이 어렵다.기존에 있는 달력라이브러리를 가지고와서 구현할수 있겠지만..그보다 오픈API로 공휴일을 DB에 적재하여 불러오는게 좀 더 안정적으로 보여 그렇게 사용하기로!!Entity@Entity@Getter@Setter@Builder@DynamicInsert@NoArgsConstructor(access = AccessLevel.PROTECTED)@AllArgsConstructor@Description("공휴일 정보")@Table(name = "holiday_info_t")public class Holiday { @Id @GeneratedValue(strategy = Generati..
AOP를 활용하여 로그 기록하기 프로젝트 중 보안관련해서 Admin 사이트의 접속 및 활동, 다운로드 등 전반적인 로그를 DB에 적재를 해야했다.페이지별 기능별 로그를 기록하기위한 방법으로2가지가 있었는데,1. 일일히 Controller마다 로그repository를 추가하여 로직구성2. AOP를 활용하여 로그기록페이지나 기능은 많이 없는 Admin 사이트이지만..일일히 비슷한 코드구성을 복붙하기엔 너무 막노동으로 생각해서 AOP를 활용해보기로 결정했다.Aspect로 모듈화하고 핵심적인 비즈니스 로직에서 분리하여 재사용하는게 차후 기능추가가 되도 유지보수가 용이할것이라는 판단이었다.주로 사용한 어노테이션Aspect : 주로 부가기능을 모듈화함.PointCut : 적용할 지점 설정.Before 혹은 Around, AfterReturning..
Spring boot 에서 XSS Filter 적용하기 웹 서비스 운영하려면 XSS 필터 적용은 필수다.XSS는 크로스 사이트 스크립팅, 즉 사이트 간 스트립팅이라는 이름의 웹 취약점이다.XSS 로 발생할 수 있는 피해로는1. 쿠키 및 세션정보 탈취2. 악성 프로그램 다운 유도3. 의도하지 않은 페이지 노출공격 구문 예시 대응방법입력 값의 길이 제한replace 등의 함수를 이용한 치환''와 같이 태그에 사용되는 기호를 엔티티코드로 변환적용했던 예시첫째로 StringEscapeUtils가 적용 될수 있도록 build.gradle에implementation 'org.apache.commons:commons-text:1.10.0'의존성을 추가한다HtmlCharacterEscapes 클래스를 추가한다public class HtmlCharacterEscapes ex..
WebConfig에 설정된 경로 중 일부 API 예외처리 현재 운영되고 있는 서비스 개선을 위해, 외부에서 호출하는 API 를 추가로 개발하게 되었다.근데, 문제가 발생했다.   뭐 설정한것도 없는데    읭?    '로그인이 필요한 서비스입니다' 라고?난 그 설정을 추가한것도 로그인을 해야하는 API도 아닌데?    원인은 WebConfig 클래스에서 발견되었는데, 해당 클래스에는"/api/v1/healthcheck/**" 경로가 SessionUserInterceptor에 적용되어 있었다.    내가 작성한 API 경로는 "/healthcheck/user/delHealth"도"/api/v1/healthcheck/**"에 포함되어 있어서 SessionUserInterceptor를 피할 수 없는 상황이었다.    private static final String..

반응형