Spring Security 확장 - 국제 화 최종 배합

제목 을 보면 어떤 학생 들 은 '국제 화' 라 고 은근히 생각 하고 있 을 거 라 고 믿 습 니 다. 바로 그 i18n 이 잖 아 요. 간단 하 잖 아 요. Acegi 의 문서 설정 을 찾 아 보면 되 잖 아 요.게다가 Acegi 는 Spring 을 바탕 으로 이 루어 졌 기 때문에 매우 편리 합 니 다.
 
처음에 저도 그렇게 생각 했 습 니 다. 흔히 말 했 습 니 다. 국제 화가 뭐 가 무 서운 지 모 르 겠 지만 문 서 를 본 후에 조합 이 오도 되 었 습 니 다. 문서 에서 이것 에 대해 몇 마디 이 야 기 를 나 눈 적 이 있 지만 문제 가 심각 합 니 다. 그 에 의 해 오도 되 었 기 때문에 Reloadable Resource BundleMessageSource 를 Acegi 에 설 치 했 습 니 다. 그러나 재 부팅 한 후에 faint 는 아무런 효과 가 없 었 습 니 다.답답 해 져 서 수많은 중 스프링 배합 을 시도 해 보 았 지만 공 을 세우 지 못 하고 돌 아 왔 다.
 
인터넷 에 접속 해서 불쌍 한 꼬마 친구 가 나 와 같은 문 제 를 만 났 는 지 볼 수 밖 에 없 었 다. 마침내 Spring 의 공식 포럼 에서 외국인 도 이 문 제 를 만 났 다. 위 에 서 는 이러쿵저러쿵 말 했다. 어떤 사람 은 Reloadable Resource BundleMessageSource 대신 Acegi 의 Acegi MessageSource 를 사용 하여 Acegi 의 jar 가방 에서 messages 파일 경 로 를 사용 했다 고 언급 했다."org/acegisecurity/AcegiMessageSource"설정 후, 과연 유효 합 니 다. 하지만 이 방식 은 classpath 표지 의 상대 경 로 를 사용 할 수 없습니다. 답답 합 니 다. AcegiMessageSource 류 의 소스 코드 를 꺼 내 서 왜 그런 지 알 게 되 었 습 니 다. 원래 AcegiMessageSource 는 Spring 의 Resource BundleMessageSource 를 계승 하 였 으 나, Resource BundleMessageSource 는 classpath 를 지원 하지 않 습 니 다."그래서 기 존의 클래스 를 대체 하여 classpath 의 상대 경 로 를 지원 하 는 LocaleAware AcegiMessageSource 를 썼 습 니 다. 이 문 제 는 해결 되 었 습 니 다.
 
다음은 코드:
/**
 * 
 *    :   AcegiMessageSource  Acegi    ,
 * AcegiMessageSource     ResourceBundleMessageSource,    classpath  <br>
 * 
 *     : 2009-11-16   03:39:31<br>
 * 
 * @author Seraph<br>
 * @email [email protected]<br>
 * 
 */
public class LocaleAwareAcegiMessageSource extends
		ReloadableResourceBundleMessageSource {

	public LocaleAwareAcegiMessageSource() {
		setBasename("org.acegisecurity.messages");
	}

	public static MessageSourceAccessor getAccessor() {
		return new MessageSourceAccessor(new LocaleAwareAcegiMessageSource());
	}

}

 XML 조합:
	<bean id="messageSource" class="com.seraph.bi.suite.platform.business.login.LocaleAwareAcegiMessageSource">
		<property name="basenames">
			<list>
				<value>classpath:/i18n/acegisecurity/messages</value>
			</list>
		</property>
	</bean>
   
	<bean id="daoAuthenticationProvider"
		class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
		<property name="userDetailsService" ref="jdbcDaoImpl" />
		<property name="userCache" ref="userCache" />
		<property name="passwordEncoder" ref="jitPasswordEncoder"  />
		<property name="messageSource" ref="messageSource" />
	</bean>

 왜 Dao Authentication Provider 에서 message Source 속성 을 만들어 야 하 는 지 에 대해 서 는 중복 설명 하지 않 습 니 다. 이 문 제 는 많은 블 로그 에서 토론 되 었 습 니 다.
 
한 마디 로 공식 문서 도 완전히 믿 을 수 있 는 것 이 아니 라 실천 을 해 야 모든 것 을 검증 할 수 있 습 니 다. ㅎ ㅎ

좋은 웹페이지 즐겨찾기