Clean Code that Works.

afterInvocationManager

Spring2010. 5. 31. 10:17
In our application, only principals with permissions to read the given customer should be allowed to obtain it. To make this check, the Customer instance is retrieved and passed to the AclEntryAfterInvocationProvider. If the authenticated object does not have the permission to read it, then the provider will throw AccessDeniesException.

http://www.denksoft.com/wordpress/web-development/acl-spring-security-tutorial/

참고 하고 있는 블로그에 있는 내용인데.. 뭔말이야 @_@;;
일단 오브젝트를 겟 한 다음에 권한을 체크 한다는 내용 같다.

그게 무슨말이야.!!!

그전 메소드 시큐리티에서는 오브젝트를 get 하기 전에, 즉 쿼리를 날리기 전에 보안 검사를 하고 있는데,
이것은 쿼리를 실행 한 후 오브젝트를 get 한 후에 이 오브젝트들을 하나 하나 보안 검사를 해서, 보안검사에 통과할 경우 오브젝트들을 보여준다.

오우 좋은데 @_@

그러니까 검색 한 다음에 검색 결과에서 필터링을 할 수 있다는 말!!
그럼 요곳들을 어떻게 쓰느냐.. 일단 아래 설정 처럼 설정 파일을 정의 해 주고.
<sec:global-method-security secured-annotations="enabled" access-decision-manager-ref="businessAccessDecisionManager">
  <sec:after-invocation-provider ref="afterAclCollectionRead"/>
  <sec:after-invocation-provider ref="afterAclRead"/>
 </sec:global-method-security>

그런 다음에 보안 설정을 할 메서드에 @Secured를 설정 해 주면 된다.
@Secured( {"AFTER_ACL_COLLECTION_READ"})
 public ArrayList<AclBbs> getList( PagingUtil pagingUtil) {
  HashMap<String, Integer> params = new HashMap<String, Integer>();
  params.put( PagingUtil.START, pagingUtil.getStart());
  params.put( PagingUtil.LIMIT, pagingUtil.getLimit());
  params.put( PagingUtil.TOTALCOUNT, pagingUtil.getTotalCount());
  return aclBbsDAO.getList( params);
 }

이렇게 해서
스프링 시큐리티는 대충 내맘대로 정리 완료??