`
dean_liu
  • 浏览: 76207 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

Spring Security国际化

    博客分类:
  • Java
 
阅读更多
Spring Security版本:2.0.5

取出Spring Security的异常信息
${sessionScope['SPRING_SECURITY_LAST_EXCEPTION'].message}

异常信息已经经过国际化处理,所以只要直接取出异常的message属性即可。
如在org.springframework.security.providers.dao.AbstractUserDetailsAuthenticationProvider.authenticate(Authentication)中:
...
            try {
                user = retrieveUser(username,(UsernamePasswordAuthenticationToken) authentication);
            } catch (UsernameNotFoundException notFound) {
                if (hideUserNotFoundExceptions) {
                    throw new BadCredentialsException(messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials"));
                } else {
                    throw notFound;
                }
            }
...


messages.getMessage("AbstractUserDetailsAuthenticationProvider.badCredentials", "Bad credentials")


org.springframework.context.support.MessageSourceAccessor
	protected Locale getDefaultLocale() {
		return (this.defaultLocale != null ? this.defaultLocale : LocaleContextHolder.getLocale());
	}

	public String getMessage(String code, String defaultMessage) {
		return this.messageSource.getMessage(code, null, defaultMessage, getDefaultLocale());
	}


org.springframework.context.i18n.LocaleContextHolder
	public static Locale getLocale() {
		LocaleContext localeContext = getLocaleContext();
		return (localeContext != null ? localeContext.getLocale() : Locale.getDefault());
	}

	public static LocaleContext getLocaleContext() {
		LocaleContext localeContext = (LocaleContext) localeContextHolder.get();
		if (localeContext == null) {
			localeContext = (LocaleContext) inheritableLocaleContextHolder.get();
		}
		return localeContext;
	}


可知保存Local信息的localeContext是从线程变量localeContextHolder中取出来的,从而可以知道必须先在localeContextHolder中设置好localeContext,国际化才能正确工作。

Spring框架中有一个过滤器是负责这个工作的,它就是org.springframework.web.filter.RequestContextFilter。

在web.xml中定义RequestContextFilter,注意要定义在springSecurityFilterChain前面才能正确工作。

	<filter>
	    <filter-name>localizationFilter</filter-name>
	    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>
	</filter>
	
	<filter-mapping>
	    <filter-name>localizationFilter</filter-name>
	    <url-pattern>/*</url-pattern>
	</filter-mapping>


/**
 * Servlet 2.3 Filter that exposes the request to the current thread,
 * through both {@link org.springframework.context.i18n.LocaleContextHolder} and
 * {@link RequestContextHolder}. To be registered as filter in <code>web.xml</code>.
 *
 * <p>Alternatively, Spring's {@link org.springframework.web.context.request.RequestContextListener}
 * and Spring's {@link org.springframework.web.servlet.DispatcherServlet} also expose
 * the same request context to the current thread.
 *
 * <p>This filter is mainly for use with third-party servlets, e.g. the JSF FacesServlet.
 * Within Spring's own web support, DispatcherServlet's processing is perfectly sufficient.
 *
 * @author Juergen Hoeller
 * @author Rod Johnson
 * @since 2.0
 * @see org.springframework.context.i18n.LocaleContextHolder
 * @see org.springframework.web.context.request.RequestContextHolder
 * @see org.springframework.web.context.request.RequestContextListener
 * @see org.springframework.web.servlet.DispatcherServlet
 */

由RequestContextFilter的注释可知它主要用于third-party servlets,Spring MVC正常是不需要使用的,由此可知Spring Security与Spring MVC配合得不太完美。

参考链接:
http://stackoverflow.com/questions/6572377/spring-security-with-acceptheaderlocaleresolver-and-i18n
分享到:
评论

相关推荐

    spring security国际化及UserCache的配置和使用

    "Spring Security 国际化及 UserCache 配置和使用" Spring Security 是一个功能强大且灵活的安全框架,它提供了许多实用的特性来帮助开发者保护 Web 应用程序。今天,我们将探讨 Spring Security 中的国际化和 ...

    springsecurity学习笔记

    以上只是Spring Security学习过程中的一部分要点,实际上,这个框架非常深奥,包含了许多高级特性,如频道安全、密码存储、国际化的错误消息等。在学习时,建议结合实际项目实践,这样能更好地理解和掌握其工作原理...

    spring security 官方文档

    8. **国际化(Internationalization)**:框架支持多语言错误消息,可以根据用户的首选语言显示相应的提示。 9. **自定义**:Spring Security非常灵活,允许开发者根据需求自定义大部分组件,如访问决策管理器、...

    spring spring security2.5 jar

    6. **国际化支持**:Spring Security允许开发者提供多语言的安全相关提示信息,增强用户体验。 在整合Spring Security 2.5与Spring 2.5时,需要注意以下几点: 1. **依赖管理**:确保Spring Security的jar包与...

    spring security3 中文版本

    Spring Security 支持国际化,可以通过配置不同的消息资源来支持多种语言环境。 #### 结论 Spring Security 3.0.1 作为一次 bug 修复版本,虽然没有添加新功能,但通过修正已知问题提高了系统的稳定性和安全性。...

    spring_security_3.1

    10. **国际化的错误消息**:Spring Security 3.1提供国际化支持,可以将错误消息翻译成多种语言,提高用户体验。 总的来说,Spring Security 3.1是一个强大且灵活的安全框架,对于Java开发者来说,理解和掌握其核心...

    spring-security 官方文档 中文版

    - Spring Security 提供了对国际化(i18n)的支持,使得开发者能够轻松地实现多语言界面。 #### 四、Spring Security 社区 - **4.1 任务跟踪**:开发者可以通过 JIRA 等工具跟踪项目的问题和进展。 - **4.2 成为参与...

    Spring Security 3.pdf

    Spring Security 3支持多语言,可以定制错误消息和登录页面的国际化内容。 总之,Spring Security 3是一个全面的框架,提供了从HTTP层到业务逻辑层的安全解决方案。其丰富的配置选项、强大的组件体系以及对现代威胁...

    spring security3.1.3 和 spring security3.0.0

    5. **更好的国际化支持**:增加了多语言支持,便于不同地区的用户使用。 6. **性能提升**:通过优化内部实现和缓存策略,提升了系统性能和响应速度。 在实际项目中,你可以根据具体需求选择使用3.0.0或3.1.3版本的...

    一个比较好的spring security实例

    9. **国际化支持**: - 提供多语言登录提示信息,通过`MessageSource`接口实现。 在"mysecurity"压缩包中的项目,我们可以看到这些概念如何实际应用于代码中,包括XML配置文件或Java配置,以及可能存在的MVC控制器...

    spring-security Jar包

    6. **国际化支持**:Spring Security 支持多语言环境,可以方便地切换不同语言的错误和登录消息。 7. **与Spring Framework的深度集成**:Spring Security 能无缝地与Spring MVC、Spring Boot和其他Spring组件集成...

    Spring Security 3多用户登录实现一

    实际项目中,你可能还需要考虑其他因素,如记住我功能、CSRF防护、国际化登录页面等。通过深入了解Spring Security的各个组件和API,你可以构建出满足各种复杂需求的安全系统。在实践中,参考官方文档和社区资源将...

    微信扫一扫登录、微信支付、springsecurity&oauth2

    项目中使用到的技术包含SpringBoot、SpringSecurity&oauth2(安全资源和授权中心模式、包括登录接口自定义返回字段、自定义手机号+密码登录、自定义免密登录)、Queue队列、线程池、xss攻击配置、SpringCache、Mybatis...

    Spring Security 3 中文 chm

    8. **国际化(Internationalization)**:Spring Security 允许你配置多语言支持,方便在全球范围内部署应用。 9. **自定义扩展**:Spring Security 是高度可扩展的,你可以自定义认证提供者、授权规则、过滤器等,...

    spring security 3 多页面登录 小秘密小运气

    如果你的应用支持多语言,Spring Security也允许你配置国际化登录和错误消息。 8. **工具使用**: 文章中提到的“工具”标签可能是指使用Spring Security与其他工具(如Spring MVC、MyBatis等)集成,或者使用IDE...

    Spring Security3.1实践

    - **国际化支持**:Spring Security支持多语言界面,提供国际化配置。 6. **源码解析** - 理解Spring Security的源码有助于深入定制和优化安全策略。 - 关键类如`AbstractAuthenticationProcessingFilter`、`...

    spring security.rar

    7. **国际化与错误处理**:Spring Security提供了自定义的错误页面和多语言支持,可以根据需求配置。 8. **集成Spring MVC**:Spring Security与Spring MVC紧密集成,可以方便地在Web应用中使用。通过...

    springSecurity3例子

    5. **国际化支持**: - 支持多语言界面,可以根据用户的首选语言显示错误消息和提示信息。 6. **会话管理**: - 可以设置会话超时、限制并发会话以及实现会话固定化策略,防止会话劫持。 7. **细粒度的URL保护**...

    springsecurity前端素材.zip

    在本“springsecurity前端素材”中,我们有两个主要的文件夹:templates和static,它们分别代表了前端展示层的不同方面。 **templates** 文件夹通常包含了应用的HTML模板文件,这些文件被用于构建用户界面。在...

    spring security3.1的demo

    8. **国际化(i18n)** Spring Security 3.1 支持消息资源文件,可以用来显示不同语言的安全相关提示。 9. **CSRF保护** 跨站请求伪造(Cross-Site Request Forgery)是一种常见的攻击方式。Spring Security 3.1...

Global site tag (gtag.js) - Google Analytics