博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
扩展Spring Security-国际化终极配制
阅读量:4045 次
发布时间:2019-05-24

本文共 1465 字,大约阅读时间需要 4 分钟。

看标题相信有些同学一定暗自在想,国际化啊,不就是那个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标识
* * 创建时间: 2009-11-16 下午03:39:31
* * @author Seraph
* @email seraph115@gmail.com
* */public class LocaleAwareAcegiMessageSource extends ReloadableResourceBundleMessageSource { public LocaleAwareAcegiMessageSource() { setBasename("org.acegisecurity.messages"); } public static MessageSourceAccessor getAccessor() { return new MessageSourceAccessor(new LocaleAwareAcegiMessageSource()); }}

 XML配制:

classpath:/i18n/acegisecurity/messages

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

 

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

转载地址:http://schdi.baihongyu.com/

你可能感兴趣的文章
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>
Selenium之前世今生
查看>>
Selenium-WebDriverApi接口详解
查看>>
Selenium-ActionChains Api接口详解
查看>>
Selenium-Switch与SelectApi接口详解
查看>>
Selenium-Css Selector使用方法
查看>>
Linux常用统计命令之wc
查看>>
测试必会之 Linux 三剑客之 sed
查看>>
Socket请求XML客户端程序
查看>>
Java中数字转大写货币(支持到千亿)
查看>>
Java.nio
查看>>
函数模版类模版和偏特化泛化的总结
查看>>