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. Thank you for some other informative site. The place else may just I am getting that type of information written in such a perfect method? I have a undertaking that I’m just now working on, and I’ve been on the look out for such information.

  2. Howdy, i read your blog occasionally and i own a similar one and i was just curious if you get
    a lot of spam remarks? If so how do you reduce it,
    any plugin or anything you can recommend? I get so much lately
    it’s driving me mad so any help is very much appreciated.

  3. This is very interesting, You are a very skilled blogger. I have joined your rss feed and look forward to seeking more of your magnificent post. Also, I have shared your site in my social networks!

  4. kamagra österreich
    To cleanse your colorectal, seek out source of nourishment abundant meals that are rich in fiber content. Fiber content performs as a organic laxative, making it a great option for colon cleaning. To maintain your overall health best, you have to be guaranteed to take in plenty of vitamins and minerals whilst you detox. Foods like natural peas, spinach, and renal system beans will clean your colon while delivering your system with minerals and vitamins.
    dapoxetin kaufen
    Shampooing the hair for your kids could be a attempting experience for mothers and fathers. You could make this exciting by acting you are a hairdresser along with your little one will be your consumer. Simply by making this into a activity, your kids will not likely look at cleaning their head of hair an distressing practical experience. Stay away from to get shampoo with your child’s eyes.
    priligy avis
    Sit back and also have a wonderful glass of tea to gradual growing older. Consuming tea has two-retract benefits. Initially, tea has been shown to be chock full of anti-oxidants and cancer combating substances that will help help keep you healthy. Secondly, sitting yourself down and having a cupful of teas is a good tension reliever and very good for your body and soul.
    cialis kopen

  5. I have witnessed that expenses for internet degree gurus tend to be an awesome value. For example a full Bachelor’s Degree in Communication with the University of Phoenix Online consists of 60 credits with $515/credit or $30,900. Also American Intercontinental University Online offers a Bachelors of Business Administration with a complete course feature of 180 units and a tariff of $30,560. Online learning has made obtaining your education much simpler because you could earn your current degree from the comfort in your home and when you finish working. Thanks for other tips I have really learned from your website.

  6. Terrific work! This is the type of information that should be shared around the net. Shame on Google for not positioning this post higher! Come on over and visit my web site . Thanks =)

  7. Thanks for the points shared on your blog. One more thing I would like to mention is that weight-loss is not information on going on a dietary fad and trying to shed as much weight as you’re able in a couple of weeks. The most effective way to burn fat is by consuming it slowly but surely and obeying some basic guidelines which can enable you to make the most through your attempt to slim down. You may know and be following these tips, although reinforcing understanding never hurts.

  8. Very well written article. It will be beneficial to anyone who usess it, as well as me. Keep up the good work – can’r wait to read more posts.

  9. Hi there, I discovered your site by the use of Google even as searching for a related topic, your site got here up, it looks good. I have bookmarked it in my google bookmarks.

  10. Hey There. I found your blog using msn. This is a really well written article. I’ll be sure to bookmark it and come back to read more of your useful information. Thanks for the post. I will definitely return.

  11. kamagra gel
    As was described in the start of this informative article, hair is among the main functions on the body. Folks observe is when they meet up with you. Even when you never understood how to look after your hair just before, one does now. Seeing when you have see the advice in the earlier mentioned article.Deal with Your Pimples With One Of These Easy Recommendations
    propecia erfahrungen
    Prior to one is going to purchase a vehicle, home, or any high price product that one need to make monthly payments on. By looking at the repayments one particular will need to make on their purchase just before purchasing they are able to make a knowledgeable selection on when they can afford it fairly. This can make sure credit keeps optimum.
    kamagra suisse
    A lot of claim that conditioning the ab muscles can in fact assistance to stop towards lower back pain and even relieve present back problems. Simply because the abdominals expand close to your aspect and back and aren’t just individuals “washboard” muscles inside your decrease tummy. Should you reinforce this selection of muscle tissue, you may prevent back pain.
    kamagra belgique

  12. propecia preço
    Be skeptical of most firms relevant to your funds because there are a large amount of companies available using a zillion and another scams working with your money. Credit rating security programs, offering to repair your credit rating or suspend your debt, are all generally scams. Study something working with your hard earned dollars before signing up.
    cialis fass
    In case you have a group helping you, you must train them to the fullest extent degree. Usually do not just chuck them out and expect palms full of funds in return. Make them learn suitable advertising expertise and be sure they fully grasp company insurance policies before allowing them to fully handle your case in the sector.
    acheter levitra
    Being a wedding photographer, you cannot have tunnel sight. You ought to be capable of seeing more. Think about on your own just like an eagle soaring above and searching over the whole landscape, less a sniper qualified on a single object using a extent. Finding even more of what’s around you is when you obtain the best shots.
    viagra comprar

  13. Hi to every body, it’s my first pay a visit of this webpage; this webpage consists of awesome and actually
    excellent data for readers.

  14. Viagra pfizer
    Everbody knows, if you’re a individual of constant lower back pain, lower back pain can badly effect your life and force you to have difficulty with daily activities. Now you know what can be done to correct your back discomfort, you may be able to resolve this and increase your quality of life!Ways To Live Your Life With Arthritis
    propecia erfahrungen
    When you have created the poor decision of getting a cash advance loan in your bank card, be sure you pay it back as soon as possible. Setting up a bare minimum repayment on this type of personal loan is a major error. Pay the minimal on other charge cards, whether it signifies you are able to spend this debts away faster.
    priligy österreich
    When you have pain inside your oral cavity, have a dental office give it a look. You might have an abscess within your mouth area which happens to be infection beneath the gum collection. This will leave you with key health issues, particularly when it ultimately ends up with your blood stream. Buy it managed today.
    viagra 100 mg

  15. Hello everyone, it’s my first visit at this web page, and
    piece of writing is actually fruitful in favor of me, keep up
    posting these articles.

  16. I know this site provides quality depending posts and additional data, is there any other web site which offers these things in quality?

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