Spring의 서브프로젝트 중 가장 오래됐고 활발한 활동을 하면서 거의 Spring Core Framework(SFW)만큼 인기가 있는 것을 꼽으라면 단연 Acegi Security Framework(ASF)일 것이다.

ASF를 처음 공부한 것은 Spring In Action 1판(SIA)을 통해서였다. Security와 관련된 한 chapter에서 Acegi를 설명하고 있었다. 하지만 나는 그것을 보고 반갑다기 보다는 화가났다. 가뜩이나 정보가 없던 2004년 초기에 처음으로 나온 Spring책이라고 구입했던 SIA은 내 기대와 달리 너무나 얇은 500페이지도 안되는 책이었다. 게다가 내가 가장 절실하게 정보를 많이 필요로 하는 SpringMVC에 대해서는 너무나 간단하게 밖에 설명을 하지 않았다. 그런데 그 적은 분량에 수십페이지를 Spring Core도 아닌 발음도 어떻게 할지 고민되는 이상한 이름의 프레임워크의 낭비를 하다니!

SIA의 Acegi와 관련된 내용을 읽어보았으나 감도 잘 안잡히고 이미 진행하고 있는 SFW기반의 프로젝트에서는 SpringAOP를 이용해서 구현한 자체 Security Framework이 있었기 때문에 그 이상 관심을 가지지 않게 되었다. 그 후에 Pro Spring을 읽을 때도 별로 관심이 없었으니 패스.

한참 후에 Rod Johnson이 쓴 Professional Java Development with Spring Framework를 읽어보니 또 Acegi가 한 챕터를 차지하고 있었다. 그 때부터 맘먹고 Acegi를 공부하기 시작했다. 하지만 그 부분을 여러번 읽고 정리를 해도 이를 당장 어떻게 적용해서 쓸 수 있는지 간단히 그림이 그려지지 않았다. 상당히 방대하고 확장성이 뛰어난 프레임워크인데 역시 한 챕터로 설명하기에는 부족한 것 같다. 대신 기본 인터페이스 구조와 아이디어를 정리할 수 있는 것은 수확이었다. 3가지 대표적인 보안과 DAO를 이용한 인증부분의 연동에 대한 이해는 성공.

그 후에 현재 참여하고 있는 프로젝트에 Acegi를 적용하려고 작정하고 본격적으로 연구를 시작했다. 그 사이 Acegi공부에 애를 쓰고 있는 재성님과 Acegi 별거 아니라며 우습게 보고 있는 영회님의 이야기를 들었다. 

먼저 Acegi를 다운 받아서 그 안에 있는 문서와 샘플을 보면서 공부를 시작했다.

레퍼런스 문서를 여러번 읽었지만 자세하고 깔끔하게 정리된 문서는 아니라서 그런지 완벽한 그림이 그려지지는 않았다. 대신 레퍼런스 문서를 통해서 SecurityContext가 만들어지는 과정과 그 활용에 대한 개념에 대한 정리를 깔끔하게 할 수 있었다. OSAF에서 내가 구현한 Context와 비슷한 개념이고 확장수준도 유사하면서

결국 남은 것은 실전. 문제는 Acegi가 bean한두개 설치한다고 동작하는 것이 아니라는 점이다. Security란 상당히 복잡한 기술이다. 구성요소도 많고 인증방법이나 권한설정 또 다양한 예외상황처리등의 문제들을 다 다룰 수 있고 특정 시스템에 맞게 customizing하는 작업이 필수다.

가장 좋은 출발점은 Acegi에 포함되어있는 두개의 샘플을 분석하는 것이다. Tutorial샘플은 간단한 URL기반의 웹보안 기능을 구현해 놓은 것이다. 복잡함을 피하기 위해서 유저정보는 memory dao를 이용해서 xml안에 설정해놓은 것을 사용한다.

이 샘플을 통해서 Acegi의 동작의 상세한 순서와 방법, 내부 구조등을 이해할 수 있었다.

먼저 할 일은 이 샘플에 나온 bean들간의 상관관계를 의존성 중심으로 풀어보는 것이다. 특히 간단하게 만들려고 inner bean으로 설정된 것은 다 밖으로 빼내서 보는 것이 좋다. 하지만 이 초간단 acegi설정에만 24개의 bean이 나온다는 사실.

이것을 풀어나가면서 이해하기 위해서 내가 새로운 기술을 학습할 때 애용하는 방법을 적용했다. 그것은 동작하는 가장 심플한 샘플로 만들기. 이 샘플의 xml설정을 내가 기능 테스트용으로 사용하는 심플한 Spring프로젝트에 적용을 했다.

먼저 목표는 에러가 나지 않는 가장 간단한 Acegi설정 만들기. Spring의 bean을 servlet filter로 만들어주는 FilterToBeanProxy를 web.xml에 설정해주고 이를 FilterChainProxy에 연동시켰다.

FilterChainProxy는 그 이름이 말해주듯이 여러개의 security용 filter bean들을 순처적으로 적용시켜주는 역할을 한다.

초간단 왕초보용 샘플에 있는 필터의 갯수는

  • httpSessionContextIntegrationFilter
  • logoutFilter
  • authenticationProcessingFilter
  • securityContextHolderAwareRequestFilter
  • rememberMeProcessingFilter
  • anonymousProcessingFilter
  • exceptionTranslationFilter
  • filterInvocationInterceptor

총 8개. 이것을 하나씩 각개격파하면서 진행을 해야한다.

이해하기 가장 쉬운 방법은 일단 최소한의 필터만 남겨보는 것. logout은 나중에 해도 되니까 logoutFilter빼고, rememberMe도 없어도 되니까 빼고. exceptionTranslation은 이름이 왠지 예외에만 적용되는 것 같아 빼고 httpSessionContextIntegration도 이름이 기니까 빼고. 등등의 작업을 통해서 정리해보면 1-2개의 필터만 남겨 놓아도 동작을 한다.(그게 뭐였는지는 지금 기억이 나지 않는다. -_-  하나도 안남기고 제외하면 에러가 난다. 그 상태에서 의존 jar파일들을 하나씩 체크해서 추가한다. 일단 인증동작은 하지 않더라도 deploy되는 것을 성공시킨다.

그리고 하나씩 필터의 역할을 추적해가면서 다음 작업 목표를 선택한다.

두번째는 login창 띄우기. 이부분을 추적하는 것이 좀 시간이 걸렸는데 그 이유는 exceptionTranslationFilter을 무시했던 탓이다. exceptionTranslationFilter는 filterInvocationInterceptor을 통해서 인증,권한에서 익셉션이 발생하면 그것을 캐치해서 적절한 동작을 하도록 해주는 역할을 한다. Throw – Catch구조가 filter chain사이에서 발생하는 구조라고 생각하면 쉽다. 인증정보가 전혀 없다면 authenticationEntryPoint로 처리해주는데 여기서 다양한 인증프로세스를 적용할 수 있다. 가장 쉬운 것은 html form을 이용하는 것. 그 외에 인증은 됐으나 권한이 없을 경우 적용할 수 있는 accessDeniedHandler도 등록을 해주면 된다.

처음에 테스트 해볼 때는 exceptionTranslationFilter빼고 exception이 밖으로 던져지게 하는 것이 좋다. 그러면 어떤 exception이 발생하는지를 직접 확인할 수 있기 때문이다. 그리고 나서 간단한 인증form을 만들어 적용해보고 그리로 redirect되는지 확인한다.

여기까지하면 가장 기초가 되는 부분에 대한 이해 성공.

이제 좀 디테일한 부분으로 들어가서 URL기반의 웹보안을 담당하는 FilterSecurityInterceptor을 세밀히 들여다본다. 여기서 ROLE과 URL Path의 설정구조를 확인할 수 있다. 재밌는 것은 그 설정부분이 그냥 단순 텍스트로 되어있다는 것.

<property name=”objectDefinitionSource”>
<value>
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/secure/extreme/**=ROLE_SUPERVISOR
/secure/**=IS_AUTHENTICATED_REMEMBERED
/**=IS_AUTHENTICATED_ANONYMOUSLY
</value>
</property>

바로 체크해볼 것은 저런 텍스트로 표현된 것을 받아들이는 PropertyEditor를 찾는 것이다. FilterInvocationDefinitionSourceEditor이 해당 PropertyEditor이다. 이를 확인해보는 것은 샘플과 같이 xml에 Path-Role을 설정하면 상관없지만 DB등에 그 정보를 넣거나 외부 파일에서 가져오는 등의 필요가 있다면 이를 확장해서 써야 하기 때문이다. 나는 고객의 요구에 따라 ROLE등록부터 설정까지를 모두 다이나믹하게 해야 한다. PathBasedFilterInvocationDefinitionMap를 확장해서 DAO를 통해서 Path-URL정보를 생성해서 넘겨주면 OK. 포럼에 가서 유사한 질문이 있었나 확인한다. 역시 비슷한 질문이 여럿있다. 내가 찾은 방법이 맞는 것을 확인한다. Acegi를 만든 Ben Alex의 답변까지 확인했으니 이대로 가면 되는 것을 확인 끝.

보통 Acegi자료나 문서에는 UserDetail이나 인증쪽을 확장하는 것은 많이 있지만 이 secure url정보를 확장하는 것에 대한 언급은 없다. 하지만 샘플을 잘 분석하면 Acegi의 수많은 확장 포인트가 보인다. 쉽게 적용가능한 것은 역시 의존성을 맘대로 설정할 수 있는 Spring IoC덕분이다.

다음은 인증부분. 인증쪽은 쉽다. authenticationManager bean을 설정한 후 AuthenticationProvider를 등록해주면 된다. Acegi의 장점은 여러가지 인증기능을 조합해서 사용할 수 있다는 것이다. 기본 샘플만해도 daoAuthenticationProvider, AnonymousAuthenticationProvider, RememberMeAuthenticationProvider세가지의 인증을 모두 적용해놨다. 먼저 DAO를 통해서 인증을 체크하고 실패하면 Anonymous와 RememberMe를 적용한다.

DAOAuthentication은 기본 틀만 유지한채로 간단히 확장할 수도 있고 이미 Acegi에 구현되어있는 DAOAuthenticationProvider를 간단히 확장해서 사용해도 된다. 샘플은 AppFuse에 잘 되어있다. :)

마지막으로 httpSessionContextIntegrationFilter. 이것은 인증정보를 session에 담아서 저장하는 것을 처리한다. 단일서버에 유저가 많지 않을 경우 적용하면 적당한 방법이다. Clustering을 위한 non-session기반의 기능도 포함되어있다. 좀 더 다른 방식의 인증정보보존 방법을 사용하려 한다면 ContextIntegrationFilter를 확장해서 만들면 되겠지라고 생각했으나 소스를 보니 확장구조가 없다. 참조해서 직접 만들어야 할 것 같다. 아니면 관련 기능을 만들어 놓은 사례를 찾아보거나.

그 외에도 Channel(HTTP, HTTPS)보안이나 다양한 인증연동방법(LDAP, JAAS, WAS…) 등의 다양한 기능도 한번씩 살펴보면 좋겠다. Acegi의 유연한 확장성을 활용하면 새로운 보안기능을 추가하는 것은 아주 간단하다.

이제 남은 것은 이렇게 인증과정과 웹보안 과정을 거쳐서 생성된 SecurityContext정보를 활용하는 것이다. SecurityContext는 ThreadLocal로 저장된다. 필요하면 애플리케이션에서 직접 User정보를 얻어서 활용해도 된다. 나의 다음 작업은 OSAF의 Context.User정보와 Acegi의 SecurityContext의 Principal정보를 연동하게 하는 것. User인터페이스를 확장해서 SecurityContext에서 정보를 끌어오게 만드는 것으로 끝. OSAF의 확장성도 쓸만하다.

Service layer의 메소드 권한체크나 Acl을 통한 DomainObject보안은 그런 응용사례의 하나이다.

이제 contacts-fiulter샘플을 볼 차례이다. 여기서는 method 권한체크와 Acl을 통한 Domain object권한기능을 적용한 좀 더 복잡한 샘플을 볼 수 있다.

이 정도 과정을 거치면 Acegi에 대한 기본적인 이해를 할 수 있을 것이다.

그 후에 할 일은 각각 시스템에 어떤 보안정책을 적용할 것인지에 대한 결정과 그에 따른 Acegi의 확장부분을 개발하는 일이다.

최근에 Spring2.0을 통해서 AspectJ의 활용도가 높아졌다. 이로 인해서 AspectJ를 이용한 각종 보안기법들이 사용되기 시작했는데 앞으로 AspectJ를 본격적으로 활용한 각종 보안부분과 Acegi가 어떻게 결합되어서 사용되어질지가 흥미롭다.

Acegi는 ‘애씨지’ 또는 ‘아씨지’라고 발음한다. Acegi Technology라는 회사를 통해 IT컨설팅일을 하던 호주(앗싸 또 호주다)의 Ben Alex가 만들었고 Acegi라는 이름은 고대 신화에 나오는 신의 이름의 하나이기도 하고 알파벳 a부터 하나씩 건너뛰어서 만든 이름이라고도 한다. 별 뜻은 없다. :)

소스코드를 통해서 본 Acegi의 코드품질은 Spring만큼 완벽에 가까운 것은 아니다. 하지만 복잡한 보안쪽을 매우 유연하게 설계한 점에서 인정!

어제 물개가 Acegi를 가르쳐 달라고 해서… 그 대신으로 공부방법을 가르쳐 주기로 하고 정리한 글 끝.

Related posts:

  1. Spring Framework 2.5 Released
  2. Spring Framework 3.0.3 릴리스 & 의존 라이브러리
  3. Spring Framework 1.1.3 released
  4. Java Web Framework 비교(Struts, Spring, WebWork, Tapestry, JSF)
  5. Spring Framework 1.1.2 released
  6. Application Framework 개발의 원칙
  7. A Framework is… / Kent Beck
  8. 스프링과 하이버네이트를 이용한 RAD프레임워크 – OSAF(OpenSprout App. Framework) 공개
  9. The Spring Experience 둘째날
  10. Spring 3.0 (35) Spring 3.0 Reference Document 공개
  11. Spring 3.0 (4) – Maven에서 Spring 3.0 최신버전 사용하기
  12. Spring 3.0 (38) Spring Reference 업데이트
  13. Spring 3.0 (44) Spring 3.0과 JEE6
  14. Spring 3.0 (26) Spring Expression Language와 @Value
  15. Spring 공부 다시 시작

Facebook comments:

to “나의 Spring Acegi Security Framework 학습기”

  1. 커헉~ 제 이름이 등장하네요. 댓글 달라고 자극하시는 것에 낚이는 것 같기도 하고…ㅡㅡ;

    아마도 작년 여름의이야기 같은데요.
    제가 acegi를 별거 아니라고 여겼던 적은 없습니다.
    아마 메신저로 대화를 하다 실언을 한 모양이네요.
    그렇다고 우습게 본 적은 없는데…
    아마도 당시 보안 솔루션이 죄다 표준화 되지 않은
    자사 솔루션을 들고 온 경우라 Acegi로 할 수 있는 일이 드물어서
    그런 상황이 와전된 모양이네요. ^^;

    저는, 일단 보안이 너무 어렵다고 생각하고 있고
    Acegi는 매우 훌륭한 프레임워크라고 생각합니다.
    (저 같은 보안 문외한에겐) JAAS니 뭐니 하는 뜬구름 같은 스펙만 있는 척박한 상황에 내려진 광명이랄까.. ^^;

  2. 아… 이럴수가…..어쩜 내맘을..

    저번 openseed에 마지막 질문후 어떤걸 물어볼까 고민하다가
    Acegi에 관한 내용을 물어보기로 하고,
    먼저 내가 그 기본 sample를 돌려보면서 문제점을 질문할려고 했는데(1주일이전부터)
    잠시 외근나오는 바람에 아직 sample을 돌려보지 못하고 있었는데….
    이렇게 먼저 답변?을 써버리시다니….
    저는 Appfuse에 예제를 배워볼려고 시도하고 있는 중입니다.
    AppFuseAcegiACL
    문서를 막 읽기 시작했는데… 좋은정보 감사 합니다.
    대략 흐름만 알아도 질문할수 있는데… 아직은 질문을 못할정도로 무지하네요 ..ㅡㅜ

    ps : 자바지기님 싸이트에 있는 Acegi관련글을 읽다가 완전한 sample이 있는걸
    먼저 한번 돌려볼려고 appfuse문서를 먼저 보기로 했다는…

  3. 영회씨랑 더불어 저도 낚였네요. 흐흐. 감사합니다.

  4. 영회/ 왜 이러세욧. Acegi 공부하느라 낑낑거리고 있는데 ‘그거 쉬워요’라고 해놓고선 ;)
    Max/ AppFuse에 아주 깔끔하게 적용되어있어서 그것을 분석하는 것도 좋은 방법입니다

  5. 사내 시스템에 acegi를 간단하게만 적용해놨는데 -_-;
    아직 확장하는 방법에 대해서 잘 모르겠어서 참 난감합니다.
    토비님이 적어주신 공부법에다가 appfuse까지 더해서 다시 공부해봐야겠네요. :)

  6. 올해 년초에 심취해서 분석했던 적이 있는데..지금은 사용하지 않다보니 새롭게 공부를 해야될거 같습니다.

    지금까지 분석한 소스 중에서 상당히 어려운 축에 속했던 놈입니다. 다시 한번 분석해서 프로젝트에 적용해보고 싶은 놈이기도 하죠.

    스터디 노하우를 너무 정리 잘하셨네요. 저도 다시금 시작할 때 이 문서 참고하겠습니다.

  7. 자바지기님… 오랜만에 뵙네요. ^^;
    이글 낚시 솜씨가 제법이네요.
    완전 저인망 그물이군요.

  8. 영회/ 낚시라고 함은 내용은 별게 없는데 제목과 자극적인 문구로 사람들을 끌어들인다는 그 뜻인가요?

  9. 좋은 제목에 좋은 글로 낚으신건 맞지 않으신가요? 제목이 사람들 혹하게 자극적이였다는걸 모르셨어요? ^^ 저도 확 낚였는걸요^^

  10. 안녕하세요.
    지금 spring2를 보면서 Acegi 공부하고 있습니다.
    이번에 리뉴얼 하는 프로젝트에
    Struts2, Spring2, iBatis를 사용하는데 사용한다고 해서
    처음 Spring2 책을 샀을때 어려워서 그냥 대충 읽고 넘어 갔는데…
    부랴 부랴 다시 보면서 공부 하고 있습니다.
    좋은 글이어서… 제가 출저 밝히고 제 블로그에 복사좀 해 가겠습니다.
    혹시 안된다면 바로 삭제 하겠습니다.
    매번 좋은 글 잘 읽고 있습니다.
    감사 합니다.

  11. 좋은 정보 감사합니다.. 제 블로그에 링크걸어도 되져?

  12. geox shoes 나의 Spring Acegi Security Framework 학습기 » Toby’s Epril

  13. athletic shoes 나의 Spring Acegi Security Framework 학습기 » Toby’s Epril

  14. Shop huge inventory of Woolrich Arctic Parka for women and men.100% authentic with free shipping.

  15. levitra 20mg
    In relation to juicing, it is very important look at the fact that even though this will give you benefits in your health insurance and overall well being, it is not necessarily the only solution. This is crucial since when you are not handling your entire body in different ways, you could lessen or remove the consequences you happen to be getting from ingesting your home created fruit juices.
    kamagra porto
    Use consumer recommendations inside your online video marketing strategy. Upload true information from real people of your enterprise for the most efficient video tutorials probable. Other potential clients will spot how valued you will be by present clients and once they realize how you go out of your own means by company, they will make a point of searching you up!
    propecia kaufen
    Now you have the intel on how to combat the battle for ideal skin, use the things you know. Healthy skin care all relies on proper servicing and very good daily behavior. Always keep that up, and not merely will your skin’s issue boost, it can keep like that!Skin Treatment Tips For Great Looking Epidermis!
    priligy avis

  16. levitra hinta
    Use plenty of wonderful content material when you are putting together your Fb webpage. There is nothing at all a whole lot worse for any client than going to a enterprise web page you are looking at and finding hardly any beneficial information and facts. Take time to respond to any queries they could have beforehand together with the content you place in your page.
    viagra kokemuksia
    Here is one more hint for individuals who want to use qr codes for portable marketing and advertising. When generating qr rules, make sure you utilize a totally free services. By picking a free of charge services, you may publicize without spending any money to enhance. Be sure the service has checking to help you know who tests your codes.
    viagra gĂĽnstig kaufen
    For those who have normal yeast infections, check if you own an general candida. The microorganisms which induces infections, Candida fungus albicans, might be a symbol of a wide spread infection in the body. Signs of a endemic Candida illness feature a bright white-covered mouth plus a diminished immunity process. Get examined through your medical doctor to discover for sure.
    cialis generika

  17. dapoxetine nederland
    Though it is much more significant to purchase an incredibly profitable company compared to a enterprise which includes outstanding managing, you ought to be cautious about snakes. Even firms that are exceedingly lucrative at the moment can be bad assets if extremely bad management is management. In the event you discover a company with management methods that can make you leery, then steer clear.
    priligy pris
    Have you been caught up inside a financial jam? Do you really need cash in a hurry? In that case, then the cash advance might be beneficial to you. A cash advance can make sure that you have enough money when you want it and also for whatever function. Before you apply for the payday advance, you must possibly look at the pursuing write-up for a couple of tips that will help you.
    cialis tilskud
    While you are getting older a good thing to perform is to make sure you get enough workout every day. You should check with with your family medical doctor before you decide to do any training routine that you are currently puzzled by. The doctor is aware of what your body are prepared for and what you ought to do.
    kamagra danmark

  18. dapoxetin kaufen
    To help keep a good credit ranking, be sure to pay out your debts on time. Prevent interest charges by deciding on a cards that features a elegance time. Then you could spend the money for overall harmony that may be due every month. If you cannot pay the whole quantity, decide on a greeting card which includes the lowest interest rate readily available.
    propecia preço
    You typically want to be sure that you have a visa, if it is needed for entry right into a state. Study what exactly you have got to current, to become permitted use of that area. Also, keep in mind at times a visa will not even permit you entry.
    levitra suisse
    Your e-mail marketing marketing campaign are often more powerful if you make it easier for buyers to unsubscribe. This could appear paradoxical, but people will tend to have confidence in you far more if you make them feel like these are in charge. Publish the unsubscribe link in a apparent location for them to believe it is very easily.
    kamagra sverige

  19. levitra svizzera
    Function smarter, not more difficult. Although most of the time, you should do both, Currency trading is an illustration of minds around brawn. The better you find out about the marketplace, the better you may come to be at forex trading. Finding the best equipment and market segments is all about your education and learning and the much more you find out about them, the speedier you may become successful.
    cialis switzerland
    If you are planning to grind your own coffee legumes, you need to understand that the particular grinding machine you choose can create a big difference in preference. Professionals recommend employing one who functions toned mincing burrs. Blade grinders may actually create enough heating to lose or scald the espresso legumes and damage the taste.
    viagra kokemuksia
    A single great tip for preventing pimples is to get in the practice of utilizing a facial on a regular basis. A face is the best way to get rid of compounds from the epidermis including essential oil and grime dust. These materials are usually what is causing the breakouts to occur. It is suggested to utilize a face treatment at least once every week and ensure you are applying it for your neck area too.
    propecia prix

Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

© 2017 Toby's Epril Suffusion theme by Sayontan Sinha