< Spring Security 내용 정리 >
* 스프링 시큐리티 (Spring Security)
- 스프링 기반의 어플리케이션의 보안(인증과 권한)을 담당하는 프레임워크
- 만약 스프링 시큐리티를 사용하지 않았다면, 자체적으로 세션을 체크하고 리다이렉트 등을 해야함
- 필터(Filter) 기반으로 동작하기 때문에 스프링 MVC와 분리되어 관리 및 동작
* 보안 용어 정리
- 접근 주체(Principal): 보호된 대상에 접근하는 유저
- 인증(Authentication): 증명 과정 (ex. 유저 아이디와 비밀번호를 이용하여 로그인하는 과정)
- 인가(Authorization): '권한부여'나 '허가'
(어떤 대상이 특정 목적을 실현하도록 허용(Access)하는 것)
- 권한: 인증된 주체가 애플리케이션의 동작을 수행할 수 있도록 허락되었는지를 결정할 때 사용
* csrf
- 보안 설정 중 post 방식으로 값을 전송할 때 token을 사용해야 하는 방식
- 보안성은 높아지지만 개발 초기에는 불편함이 있음
< 기타 내용 정리 >
* 인터셉터(Interceptor)
- Dispatcher servlet에서 Handler(Controller)로 요청을 보낼 때,
Handler에서 Dispatcher servlet으로 응답을 보낼 때 동작
- 인터셉터 작성법
> org.springframework.web.servlet.HandlerInterceptor 인터페이스 구현
> org.springframework.web.servlet.handler.HandlerInterceptorAdapter 클래스 상속
> Java Config를 사용한다면, WebMvcConfigurerAdapter가 가지고 있는
addInterceptors 메소드를 오버라이딩하고 등록하는 과정을 거침
> xml 설정을 사용한다면, <mvc:interceptors> 요소에 인터셉터를 등록
* 아규먼트 리졸버
- 컨트롤러의 메소드의 인자로 사용자가 임의의 값을 전달하는 방법을 제공하고자 할 때 사용
- 예를 들어, 세션에 저장되어 있는 값 중 특정 이름의 값을 메소드 인자로 전달
- 아규먼트 리졸버 작성방법
> org.springframework.web.method.support.HandlerMethodArgumentResolver를 구현한
클래스를 작성
> supportsParameter 메소드를 오버라이딩한 후, 원하는 타입의 인자가 있는지 검사한 후
있을 경우 true가 리턴되도록 함
> resolveArgument 메소드를 오버라이딩한 후, 메소드의 인자로 전달할 값을 리턴
> Java Config를 사용한다면, WebMvcConfigurerAdapter를 상속받은 Java Config 파일에서
addArgumentResolvers 메소드를 오버라이딩한 후 원하는 아규먼트 리졸버 클래스 객체를 등록
* 로깅(Logging)
- 정보를 제공하는 일련의 기록인 로그(log)를 생성하도록 시스템을 작성하는 활동
- 프린트 줄 넣기(printlining)는 간단한, 보통은 일시적인, 로그를 생성하기만 함
- 시스템 설계자들은 시스템의 복잡성 때문에 로그를 이해하고 사용해야 함
- 로그가 제공하는 정보의 양은, 이상적으로는 프로그램이 실행되는 중에도, 설정 가능해야 함
- 일반적으로 로그 기록의 이점
> 로그는 재현하기 힘든 버그에 대한 유용한 정보를 제공할 수 있음
> 로그는 성능에 관한 통계와 정보를 제공할 수 있음
> 설정이 가능할 때, 로그는 예기치 못한 특정 문제들을 디버그하기 위해, 그 문제들을 처리하도록
코드를 수정하여 다시 적용하지 않아도, 일반적인 정보를 갈무리할 수 있게 함
- 자주 사용하는 로그 라이브러리
> java.util.logging / Apache Commons logging / Log4j / Logback
* SLF4J
- logging 관련 라이브러리들을 하나의 통일된 방식으로 사용할 수 있는 방법 제공
- 로깅 Facade (로깅에 대한 추상 레이어를 제공하는 것이고 interface의 모음)
- logback 설정
> Appender
- ConsoleAppender: 콘솔에 로그를 어떤 포맷으로 출력할지를 설정할 때 사용
- FileAppender: 파일에 로그를 어떤 포맷으로 출력할지를 설정
- RollingFileAppender: 로그의 양이 많아지면, 하나의 파일로 관리하기 어려움
이를 해결하기 위해 하루 단위로 로그를 관리하고자 할 경우 사용
* Log Level (로그 수준)
1. trace, 2. debug, 3. info, 4. warn, 5. error
* 로그 출력 메소드
- 문자열 결합을 위해 '+' 연산자를 사용하지 않음
- 로그로 남길 변수의 수만큼 {}를 이용
* Multipart
- 웹 클라이언트가 요청을 보낼 때 http프로토콜의 바디 부분에 데이터를 여러 부분으로 나눠서 보내는 것
- 보통 파일을 전송할 때 사용
- HttpServletRequest는 파일 업로드를 지원 안함
> HttpServletRequest는 웹 클라이언트가 전달하는 Multipart 데이터를 쉽게 처리하는 메소드 제공 X
> 서블릿에서 파일 업로드를 처리하려면 별도의 라이브러리를 사용해야 함
아파치 재단의 commons-fileupload가 대표적인 라이브러리
- Controller에서의 업로드 처리
> @PostMapping이 사용되어야 함
> 업로드 파일이 하나일 경우 @RequestParam("file") MultipartFile file
> 업로드 파일이 여러개일 경우 @RequestParam("file") MultipartFile[] files
> MultipartFile의 메소드를 이용해서 파일이름, 파일크기 등을 구하고
InputStream을 얻어 파일을 서버에 저장
'IT > Java' 카테고리의 다른 글
[JUnit] TDD를 편하게 하기 위한 JUnit 사용법 (0) | 2023.03.25 |
---|---|
[Quartz] Quartz 스케줄러 적용의 건 (0) | 2023.01.13 |
2021-03-11 일지1 (0) | 2021.03.11 |
2021-03-10 일지3 (0) | 2021.03.10 |
2021-03-10 일지2 (0) | 2021.03.10 |