扩展Spring Security-国际化终极配制

看标题相信有些同学一定暗自在想,国际化啊,不就是那个i18n嘛,简单啊,查查Acegi的文档配置下就好了呀。再说Acegi又是基于Spring实现的,很方便的啊。

 

开始俺也是这么想的,老生常谈了,一个国际化有啥可怕,但是看过文档后配制就被误导了,文档上对此也是聊聊几句带过,但问题就严重了,因为被他误导所以使用了ReloadableResourceBundleMessageSource在Acegi中配置了下,但重启后发现,faint,一点效果也没有,这下郁闷了,于是尝试了无数中Spring配制一一无功而返。

 

只能上网看看有没有可怜的小盆友和我遇到一样的问题,终于在Spring的官方论坛上发现了个老外也遇到了这个问题,上面七嘴八舌,有人提到用Acegi的AcegiMessageSource代替ReloadableResourceBundleMessageSource配制,使用了Acegi的jar包中messages文件路径"org/acegisecurity/AcegiMessageSource" 配置后,果然有效,但此方式无法使用classpath标识相对路径,郁闷,翻出AcegiMessageSource类的源码,终于明白为何了,原来AcegiMessageSource继承的是Spring的ResourceBundleMessageSource,而ResourceBundleMessageSource不支持classpath,所以写了个LocaleAwareAcegiMessageSource来替代原有的类以支持classpath相对路径,至此问题解决。

 

以下是代码:

/**
 * 
 * 类说明: 替代AcegiMessageSource实现Acegi的国际化,
 * AcegiMessageSource所继承的是ResourceBundleMessageSource,无法使用classpath标识<br>
 * 
 * 创建时间: 2009-11-16 下午03:39:31<br>
 * 
 * @author Seraph<br>
 * @email seraph115@gmail.com<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>

 对于为什么需要在DaoAuthenticationProvider中配制messageSource属性就不重复说明了,这个问题有很多博客中讨论过了。

 

总结一句话就是官方文档也不是完全可靠,实践才能验证一切,呵呵

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值