Whiteship's Note


Acegi로 웹 애플리케이션 보안하기 2



2. acegi 컨텍스트 파일 작성하고, 스프링 컨텍스트 리스너 등록하기.

일반적인 스프링 컨텍스트 파일을 작성합니다. Acegi 관련 bean 설정을 따로 모아두는 것이 관리에 용이할 것입니다. 따라서 새로운 파일을 작성합니다.

사용자 삽입 이미지

그리고 web.xml에서 참조할 FilterChainProxy bean을 위에서 생성한 파일에 등록합니다.

    <bean id="filterChainProxy"
        class="org.acegisecurity.util.FilterChainProxy">
    </bean>

그리고 다시 web.xml로 돌아갑니다. 위에서 작성한 스프링 애플리케이션 컨텍스트 파일을 스프링이 사용할 수 있도록 설정해 주어야 합니다. 그렇게 하기 위해서 필요한 것이, ContextLoaderListener 이며, 이 녀석을 등록하면 <context-param> 엘리먼트로 등록되어 있는 정보를 바탕으로 스프링 애플리케이션 컨텍스트 파일을 읽어옵니다.

즉 web.xml 설정에 다음의 코드를 추가합니다.
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/acegi-config.xml</param-value>
    </context-param>

이제 web.xml과는 영원히 안녕입니다. 지금까지 web.xml에 추가한 내용은 filter, filter-mapping, listener, context-param 이렇게 네 개입니다.


top


Acegi로 웹 애플리케이션 보안하기 1



1. web.xml에 필터 등록하기
사용자 삽입 이미지
FilterToBeanProxy를 Acegi Filter Chain Proxy로 등록합니다. FilterToBeanProxy는 스프링 애플리케이션 컨텍스트에 위치한 bean을 참조할 수 있도록 만들어둔 클래스입니다. 이녀석이 없었다면 일일히 모든 Filter에서 다음과 같은 코드를 삽입하여, Spring에 종속적인 코드를 만들어 가면서까지, 스프링 애플리케이션 컨텍스트에 위치한 bean을 필터에서 사용했을 것입니다.

ApplicationContext ctx = WebApplicationContextUtils.
getWebApplicationContext(servletContext);
Bar bar = (Bar) ctx.getBean("bar");

FilterToBeanProxy는 실제로 자신이 할 일을 스프링 애플리케이션 컨텍스트에 위치한 bean에게 모두 위임을 하는데, 그 bean을 찾기 위한 파라미터가 바로 targetClass 입니다. 이 필터를 생성할 때 스프링 애플리케이션 컨텍스트에서 targetClass 파라미터의 값으로 설정된 타입의 bean을 찾습니다. 즉 위의 설정을 보면 org.acegisecurity.util.FilterChainProxy를 찾게 되는 것입니다. 그리고 찾은 FilterChainProxy에게 할 일을 위임하는 것입니다. 그래야 스프링의 장점 중 하나인 DI(Dependency Injection)를 백분 활용할 수 있을 것이며, web.xml이 복잡해지지 않을 것입니다.

targetClass 속성 말고 targetBean 속성을 사용해서 스프링 애플리케이션 컨텍스트에 위치한 bean의 이름을 사용하여 역할을 위임할 bean을 찾을 수도 있는데, 만약에 bean의 이름을 변경하면, web.xml에서도 targetBean 속성의 값을 변경해야하기 때문에, targetClass 속성의 사용을 권장하고 있습니다.

이렇게 filter 설정을 마치면.. 이 filter를 적용할 url을 설정해 줍니다. 그 부분이 filter-mapping이며, 설정 내용을 보시면 모든 url이 모두 이 필터를 거치도록 설정한 것을 보실 수 있습니다.

이제 해당 웹 애플리케이션으로 들어오는 모든 요청은 FilterToBeanProxy를 거치게 되며, 이 녀석은 FilterChainProxy에게 그 역할을 위임합니다. 결국 모든 요청은 스프링 애플리케이션 컨텍스트에 등록되어 있는 FilterChainProxy를 거치게 되는 것입니다.

그럼 다음 글에서 FilterChainProxy를 살펴보겠습니다.

참조 : SIA 2판 7장
top


SimpleFormController 에피소드2



아래 발생한 문제는 SimpleFormController와는 전혀 관계가 없는 내용일 수도 있다는 것을 미리 알려드리고 시작해야겠습니다. 이유는 결론을 보시면 알게 되실듯.

사용자 삽입 이미지
위와 같은 리스트가 있습니다. 오호 분명히 "기선"이라는 사람이 매우 많이 있습니다. 왼쪽에 있는 search로 이동해서 "기선"을 찾아 봅시다.

사용자 삽입 이미지
이렇게 기선을 입력하고 enter 또는 search 버튼을 클릭했더니 다음과 같은 화면이 출력 됐습니다.

사용자 삽입 이미지
헐...출력할 것이 없다니.. 도대체 어디서 문제가 생긴거야???

1. 소스코드를 점검하기 시작합니다. JSP와 Controller를 점검하기 시작했습니다.

more..


처음에는 command 객체에 값이 들어가지 않는 것 같다는 생각이 들었습니다. 중간에 출력문을 한번 넣어보면 될 것을[각주:1] 아직까지도 SimpleFormController가 어떻게 동작하는 것인지 제대로 모르기 때문에 그 떈 더욱 더 Command 객체에 값이 언제 들어가는 것인지 알 수가 없었습니다.

그리고 두번째는 지난 글에서 의문이 들었던 command 객체를 도메인 객체로 써야 하는건가? 싶어서 Member로 바꿔서도 해봤습니다. 결과는... 여전했습니다.

2. 조금더 공부하다가 Command 객체에 값이 들어갔는지 확인해봤습니다. 세상에 값이 들어가 있었습니다. 값이 들어가 있긴 한데... 한글이 깨져있더군요.

message 출력: ?¸°???

-_-;; 난감했습니다. 이전에 DB 인코딩 문제로 한참을 해맸었는데 또다시 인코딩문제인가.. ㄷㄷㄷ 거리고 있었는데 다행히 한수형이 알려주셔서 web.xml에 다음과 같이 코드를 넣어줬더니 한글이 제대로 보였습니다.

more..


3. 좋았습니다. 이제 콘솔에 찍어보니 한글도 제대로 보이고 검색을 날렸는데... 여전히!! 못찾는겁니다. 왜?? 도대체 왜!! 못찾는거야.. 하면서 iBATIS에 SQL을 확인하러 갔습니다... 세상에...ㅠ.ㅠ

more..

like로 바꿔야 겠어요. 흐흐흐흐흐흐흐


  1. 소스코드에 주석처리 된 부분입니다. [본문으로]

'Spring > 주소록 만들기' 카테고리의 다른 글

DisplayTag 링크 기능  (0) 2007.02.08
Validator 사용하기  (0) 2007.02.07
검색창 하나로 모든 필드에서 검색하기.  (4) 2007.02.07
SimpleFormController 에피소드2  (0) 2007.02.02
SimpleFormController 에피소드1  (2) 2007.02.02
Spring's form tag  (0) 2007.02.01
DisplayTag과 SpringMVC  (0) 2007.01.31
DisplayTag 배끼기  (2) 2007.01.31
주소록 개발 카탈로그  (4) 2006.12.30
JSP 화면 작성  (0) 2006.12.29
Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
top


Spring MVC 구동을 위한 web.xml 작성



참조 : Spring MVC 어플리케이션 개발 <2> Spring MVC 구동을 위한 web.xml 작성

Spring MVC 공부중에서 찬욱이와 열띤 토론이 있었던 dispatcher를 설정하는 부분인 것 같습니다.

앞에서 만든 웹 프로젝트를 보면 이클립스에서 만들어준 web폴더 -> WEB-INF 안에 보면 web.xml이 있습니다. 그 파일을 보시면 다음과 같습니다.

more..


<display -name>은 어디에 표시가 되는건지 모르겠지만 웹 사이트에 대한 간략한 설명이 들어가면 좋을 것 같습니다.
<webcole-file-list>는 대문으로 쓰일 수 있는 파일 이름들이 쭉~ 나열되어 있는데 현재 대문역할을 하는 파일은 index.html밖에 없으니 나머진 지워도 될 것 같습니다.
따라서 다음과 같이 수정합니다.

more..


그리고 이제 Dispatcher를 추가합니다. Dispatcher는 Spring에서 front controller역할을 하는 것으로 특정 URL의 요청을 처리할 Contoller를 찾아 주는 Handler Mapping을 등록해둡니다.

<!-- Spring Front Controller 등록 -->
    <servlet>
        <servlet-name>addressBook</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>addressBook</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>
.do로 끝나는 요청들을 addressBook-servlet.xml로 보내도록 설정했습니다.


설정 내용 중에 보시면 org.springframework.web.servlet.DispatcherServlet을 사용하고 있습니다. 따라서 spring.jar파일을 web/WEB-INF/lib에 넣어줍니다. 그러면 자동으로 Web App Libraries로 lib폴더에 들어간 spring.jar파일을 인식하게 됩니다.
사용자 삽입 이미지

'Spring > 주소록 만들기' 카테고리의 다른 글

Spring MVC configuration 파일들 설정 하기  (0) 2006.12.26
MVC 컨트롤러 작성  (0) 2006.12.26
화면 작성  (0) 2006.12.26
Alt + Shift + X, R 주의  (2) 2006.12.25
Web Application Context 작성  (3) 2006.12.25
Spring MVC 구동을 위한 web.xml 작성  (0) 2006.12.25
이클립스에서 웹 프로젝트 생성하기  (0) 2006.12.25
Spring MVC 공부 중  (10) 2006.12.23
CSS 공부 중  (2) 2006.12.21
주소록 화면 완성  (3) 2006.12.19
중간점검  (0) 2006.12.17
top