Spring Framework/끄적끄적 14

[Spring] 필터(Filter)란 무엇인가?

필터(Filter)란 무엇일까? HTTP 요청과 응답을 변경할수 있는 재사용 가능한 코드.(서블릿 2.3규약에 새롭게 추가됨) 필터는 객체의 형태로 존재하며 클라이언트로부터 오는 요청(Request)과 최종자원(서블릿/JSP)사이에 위치하며, 클라이언트의 요청정보를 알맞게 변경할수 있으며, 또한 필터는 최종 자원과 클라이언트로 가는 응답(Response) 사이에 위치하여 최종 자원의 요청 결과를 알맞게 변경할수 있다. 그림으로 보면 자원이 받게되는 요청 정보는 클라이언트와 자원사이에 존재하는 필터에 의해 변경된 요청정보가 되며, 클라이언트가 보게되는 응답정보는 클라이언트와 자원사이에 존재하는 필터에 의해 변경된 응답정보가 된다. 필터는 클라이언트와 자원사이에 1개가 존재하는 경우가 보통이지만, 여러개의 ..

[Spring] 스프링에서의 필터 개념및 예제

Filter란? 필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능이다. 스프링 프레임워크에서 필터로 인증등 다양한 작업을 하는데 최근 xss 공격방어를 하며 필터를 사용해봣기에 공부겸 블로그에 작성해보겠다 위 그림은 스프링 필터와 연관지어 검색하면 많이 보이는 그림중 하나이다. 스프링 프레임워크에서 요청에 대한 라이프 사이클을 나타낸그림이다. 스프링 프레임워크는 들어온 요청이 DispatcherServlet에 의해 컨트롤러에 매핑이된다. Filter는 요청이 DispatcherServlet에 의해 다뤄지기 전,후에 동작한다. 또한 Filter는 FilterChain(필터 체인)을 통해 여러 필터가 연쇄적으로 동작하게 할수 있다. 그럼 Filter는 어디에 쓰이나? 필터는 주로 요청에 대..

[Spring] XSS 공격과 보안처리 방법

XSS 공격이란? 흔히 사이트의 게시판의 게시글 작성 시 내용에 스크립트 코드를 삽입하여 게시글을 읽는 사용자의 쿠키정보 탈취 하거나 악성프로그램 다운로드, 공격자가 의도한 URL로 이동시키는 등 개발자가 의도하지 않은 기능을 동작하도록 만든다. XSS의 공격 방식은 크게 Reflected XSS, Stored XSS, DOM Based XSS 세 가지로 분류할 수 있으며 이에 대한 설명은 링크로 대신 한다. XSS(Cross Site Scripting) 공격이란? - https://4rgos.tistory.com/1 XSS 공격 실습방법 - https://g-idler.tistory.com/12 XSS 공격이란 - https://brownbears.tistory.com/250 XSS 취약점에 대한 보안..

[Spring] @param 사용이유

public void countQuery(@Param("name")String parameter); 이렇게 @Param 어노테이션을 붙이면 본인이 원하는 명으로 mapper에서 사용할 수 있다. 위와 같은 경우는 #{name}이 되겠다. 사실 위의 코드같은경운 파라미터가 하나라서 @Param 을 안써도되지만, 파라미터가 두개일경우 마이바티스에서 인식을 못하기때문에 @param을 사용해야한다. 물론, 어노테이션을 쓰지 않아도 mapper에서 #{param1} 이라던지, #{parameter} 로 파라미터 명을 적으면 사용이 가능하다.

[Spring] @RequestParam 파라미터 매핑

컨트롤러를 구현할 때 가장 많이 사용되는 어노테이션은 바로 @RequestParam 일 것이다. @RequestParam은 HTTP 요청 파라미터를 컨트롤러 메소드의 파라미터로 전달받을 때 사용된다. 즉, JSP에서 request.getParameter(); 와 비슷하다고 볼 수 있다. @RequestParam 어노테이션이 적용된 파라미터는 기본적으로 필수 파라미터이다. 따라서 @RequestParam 어노테이션에 명시한 HTTP 요청 파라미터가 존재하지 않을 경우 스프링 MVC는 잘못된 요청을 의미하는 400 응답 코드를 웹 브라우저에 전송한다. 필수가 아닌 파라미터인 경우 required 속성 값을 주어 false로 지정해주면 된다. required 속성 값을 따로 작성안할 경우 기본 값은 true로..

[Spring] servlet-contex.xml, root-context.xml, web.xml 간략한 정리

우선, xml 파일은 모두 객체(Bean)를 정의합니다. 1. servlet-contex.xml servlet에서 보듯이 요청과 관련된 객체를 정의합니다. url과 관련된 controller나, @(어노테이션), ViewResolver, Interceptor, MultipartResolver 등의 설정을 해줍니다. 초기 파일을 보시면 위와 같은 주석이 있는데 DispatcherServlet과 관련된 설정을 해야함을 알 수 있습니다. 2. root-contex.xml servlet-context.xml 과는 반대로 view와 관련되지 않은 객체를 정의합니다. 따라서 Service, Repository(DAO), DB등 비즈니스 로직과 관련된 설정을 해줍니다. 3. web.xml 설정을 위한 설정파일입니다...

[Spring] 스프링 MVC의 흐름

1)클라이언트가 url을 통해 요청을한다 2) 디스패쳐 서블릿이 일단받는다 3) 디스패쳐 서블릿이 요청 url과 맞는 controller를 검색한다(핸들러매핑) 4)(핸들러매핑)은 요청 url과 매핑된 컨트롤러를 디스패쳐 서블릿에 리턴한다 5) 디스패쳐서블릿은 url과 매핑된 컨트롤러를 핸들러 (핸들러어댑터에게) 알맞은 처리를 요청한다 6)(핸들러 어댑터는) 해당요청에 맞는 메소드를 (컨트롤러에게)요청하고 비즈니스로직결과를 리턴한다 7)핸들러 어댑터는 리턴결과를 디스패쳐 서블릿에 객체로 리턴한다 8)디스패쳐 서블릿은 핸들러어댑터에게 받은 (데이터와 jsp의값을) 뷰리졸버에게 보내 view 를 찾아달라고 요청을 한다 9)뷰리졸버가 찾아서 리턴하면 view객체에 응답해서 view객체는 클라이언트에게 값을 전..

[Spring] ServletContext, HttpSession, HttpServletRequest 차이점

- 이전페이지에서 수집했던 데이터를 다음 페이지에서 사용할수 없다, 다음페이지에서도 이전 페이지에서의 데이터를 유지해서 사용하기 위해선 어딘가에 저장해두고 유지시켜 놓아야함. * 저장소는 크게 3가지가 있음.(차이나는건, 메모리에서 유지되는 기간이 다르다.) 1) ServletContext 2) HttpSession 3) HttpServletRequest ServletContext HttpSession HttpServletRequest 생성: 서버시작시 제거: 서버 중지시 web application이 서비스중인 동안에는 계속 존재 생성: Client가 최초 접속시 제거: Client 접속 종료시 Client가 접속중인 동안에만 존재 생성: Client가 요청시 삭제: Server가 응답시 Request..

[Spring] 스프링 어노테이션 정리

Annotation 이란? Annotation(@)은 사전적 의미로는 주석이라는 뜻이다. 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다. 즉, 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다. meta data : 데이터를 위한 데이터) 다음은 어노테이션의 용도를 나타낸 것이다. 컴파일러에게 코드 작성 문법 에러를 체크하도록 정보를 제공한다. 소프트웨어 개발 툴이 빌드나 배치시 코드를 자동으로 생성할 수 있도록 정보를 제공한다. 실행시(런타임시)특정 기능을 실행하도록 정보를 제공한다. 기본적으로 어노테이션을 사용하는 순서는 다음과 같다. 어노테이션을 정의한다. 클래스에 어노테이션을 배치한다. 코드가 실행되는 중에 Reflecti..

[Spring] 스프링 @RequestParam과 @PathVariable

@PathVariable 이란? @RequestMapping의 URL 에서 ({})의 명시된 변수를 받아온다. @PathVariable을 이용하여 URI 템플릿중 어떤 파라미터를 가져올지 결정할수 있다 라는 형식으로 view 단에서 파라미터를 보내면 컨트롤러에서 파라미터를 받기 위해서는 위 사진처럼 받아올수 있다 . @PathVariable("boardId") 에서 괄호'( )' 는 생략 가능하지만, 대신에 파라미터 이름은 같아야한다. @RequestParam 이란? @RequestParam을 사용할시 파라미터를 넘기지 않으면 400에러를 뱉기때문에, 선택적으로 사용할때는 꼭 required = false를 적어야함. 위 사진과 같은 제이쿼리의 ${boardId} 처럼 동적 데이터를 보내야할땐, 스프링단..