행복한 아빠
[Grails1.0 사용자 가이드] 6. 웹 계층 - 6 본문
1. 소개
2. 시작하기
3. Configuration
4. 명령어
5. GORM-1: 기본
5. GORM-2: 질의
5. GORM-3: 고급
6. 웹계층-1: 컨트롤러
6. 웹계층-2: GSP
6. 웹계층-3: 태그 lib
6. 웹계층-4: URL Mapping
6. 웹계층-5: Web Flow
6. 웹계층-6: 필터
6. 웹계층-7: Ajax등
7. 유효성검사
8. 서비스계층
9. 테스팅
10. 국제화
11. 보안
12. 플러그인
13. 웹서비스
14. Grails와 Spring
15. Grails 와 Hibernate
16. Scaffolding
6. 웹 계층 - 6
6.6 필터
비록 Grails 컨트롤러가 정교한 인터셉터를 지원한다 하더라도 그것은 몇 개의 컨트롤러에 적용할 때만 유용하고 대규모 애플리케이션에서는 관리하기 어려워진다. 반면 필터는 전체 컨트롤러 그룹, URL 공간 또는 특정 액션을 가로질러 적용할 수 있다. 나아가 필터는 끼워넣기(plug-in)가 아주 쉬우며 당신의 주된 컨트롤러 로직과 완벽하게 분리되어 유지된다. 그리고 이것은 보안, 로깅 등과 같이 중간에 끼워넣는(cross cutting) 종류의 개념을 적용하는데 유용하다.
6.6.1 필터 적용하기
필터를 만들기 위해서는 grails-app/conf 디렉토리에 약속에 따라 Filters로 끝나는 클래스를 만든다. 이 클래스 안에 필터를 정의한 filters라는 코드 블럭을 정의한다.
def filters = {
// 여기에 필터를
}
}
filters 블럭안에 정의한 각 필터는 이름과 범위를 가져야 한다. 이름은 메소드 이름이고 범위는 named 아규먼트를 이용하여 정의한다. 예를 들면 만일 모든 컨트롤러와 모든 액션들에 적용할 필터를 정의한다면 와일드카드를 사용할 수 있다.
// 인터셉터 정의들
}
필터의 범위는 다음 중 하나가 될 수 있다.
- 컨트롤러 그리고(또는) 액션 이름 쌍, 선택적으로 와일드카드 사용
- URI, Ant 패스 매칭 문법
몇개의 필터 예제를 보자
- 모든 컨트롤러와 액션
}
- 오직 BookController에만
}
- URI 공간에 적용
}
- 모든 URI에 적용
}
6.6.2 필터 종류
필터의 몸체 안에 필터에 대해 아래의 가로채기 종류 중 하나를 정의할 수 있다.
- before: 액션 전 실행. 다음의 모든 필터들과 액션이 실행되지 않게 false를 반환할 수 있다.
- after: 액션 뒤 실행. 첫번째 아규먼트로 뷰 모델을 가진다.
- afterView: 뷰 렌더린 후 실행
예를 들어 일반적인 인증 사용 예를 실행하기 위해서 다음과 같이 필터를 정의할 수 있다.
def filters = {
loginCheck(controller:'*', action:'*' {
before = {
if(!session.user && !actionName.equals('login')) {
redirect(action:'login')
return false
}
}
}
}
}
여기에서 loginCheck 필터는 사용자가 세션에 있는지 검사하여 없으면 로그인 액션으로 리다이렉트하는 블럭 코드를 실행하기 위해 before 인터셉터를 사용했다.
6.6.3 필터가 할 수 있는 것들
필터는 컨트롤러와 태그 라이브러리에서 가능한 공통의 속성들과 거기에 애플리케이션 context까지 지원한다.
- request: HttpServletRequest 객체
- response: HttpServletResponse 객체
- session: HttpSession 객체
- servletContext: ServletContext 객체
- flash: flash 객체
- params: request 파라메터 객체
- actionName: 다음 실행할(dispatch) 액션 이름
- controllerName: 다음 실행할(dispatch) 컨트롤러 이름
- grailsApplication: 현재 실행 중인 Grails 애플리케이션
- applicationContext: ApplicationContext 객체
하지만 필터는 단지 컨트롤러와 태그 라이브러리의 일부 메소드만을 지원한다. 이것들은 다음과 같다.
- redirect: 다른 컨트롤러와 액션으로 리다이렉트하려구...
- render: 사용자 정의 응답을 표현하기 위해 사용
---
원문: 6.6 Filters
'Grails' 카테고리의 다른 글
[Grails1.0 사용자 가이드] 7. 유효성검사 (0) | 2008.03.11 |
---|---|
[Grails1.0 사용자 가이드] 6. 웹 계층 - 7 (12) | 2008.03.10 |
[Grails1.0 사용자 가이드] 6. 웹 계층 - 6 (0) | 2008.03.09 |
[Grails1.0 사용자 가이드] 6. 웹 계층 - 5 (0) | 2008.03.08 |
[Grails1.0 사용자 가이드] 6. 웹 계층 - 4 (0) | 2008.03.07 |
[Grails1.0 사용자 가이드] 6. 웹 계층 - 3 (0) | 2008.03.06 |