localefilter.java

来自「Java的框架」· Java 代码 · 共 72 行

JAVA
72
字号
package mcaps.core.preference.webapp.filter;

import java.io.IOException;
import java.util.Locale;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import mcap.core.preference.model.Preference;
import mcap.core.preference.model.PreferenceSet;
import mcap.core.preference.service.PreferenceManager;
import mcap.core.preference.util.NameConstants;

import org.springframework.context.ApplicationContext;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.web.context.support.WebApplicationContextUtils;
import org.springframework.web.filter.OncePerRequestFilter;

/**
 * Filter to wrap request with a request including user preferred locale
 * preference.
 * @author bstan
 * @date 21-Jun-2006
 * @version 1.0.1.0
 */
public class LocaleFilter extends OncePerRequestFilter {

	public void doFilterInternal (HttpServletRequest request,
			HttpServletResponse response, FilterChain chain) throws IOException,
						ServletException {

		HttpSession session = request.getSession (false);
		
		if (session != null && request.getRemoteUser() != null) {
			Locale preferredLocale = (Locale) session.getAttribute (NameConstants.PREFERRED_LOCALE);
			
			if (preferredLocale == null) {
				ApplicationContext ctx = WebApplicationContextUtils
								.getRequiredWebApplicationContext (session.getServletContext ());
				PreferenceManager mgr = (PreferenceManager) ctx.getBean ("preferenceManager");
		
				PreferenceSet prefSet = mgr.getPreferenceSet(request.getRemoteUser());
				
				Preference pref = prefSet.get("locale");
				
				if (pref != null) {
					preferredLocale = new Locale (pref.getValue());
				}
				else {
					preferredLocale = new Locale ("en");
				}
				
				session.setAttribute (NameConstants.PREFERRED_LOCALE, preferredLocale);
			}
			
			if (!(request instanceof LocaleRequestWrapper)) {
				request = new LocaleRequestWrapper (request, preferredLocale);
				LocaleContextHolder.setLocale (preferredLocale);
			}
		}

		chain.doFilter (request, response);

		// Reset thread-bound LocaleContext.
		LocaleContextHolder.setLocaleContext (null);
	}

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?