shiro spring mvc 국제 화 선택 로그 인 언어

프로젝트 에 국제 화 된 수요 가 있 습 니 다. 사용자 가 시스템 에 로그 인 할 때 언어 를 선택 하고 로그 인 한 후에 모든 텍스트 정 보 는 페이지 를 포함 하여 해당 하 는 언어 로 전환 합 니 다. 모든 페이지 는 언어 를 단독으로 전환 할 수 없고 로그 인 할 때 한 번 만 선택 할 수 있 습 니 다.프로젝트 는 shiro spring mvc 를 바탕 으로 구축 되 었 으 며, 다음은 실현 방향 을 설명 합 니 다.
    우선, spring 국제 화 과정:
STEP 1.
beans. xml 에 message Source bean 설정:
	
		
		
		
			
				classpath:i18n/messages
			
		
	

i18n / 아래 messagesen_US. properties 와 messageszh_CN. properties 같은 국제 화 파일.이렇게 하면 XmlWebApplication Context 는 기본 적 인 국제 화 능력 을 가지 게 되 었 습 니 다. getMessage () 방법 을 사용 하면 기본 언어의 텍스트 를 얻 을 수 있 습 니 다. 다른 언어 를 얻 으 려 면 Locale 인 자 를 제공 해 야 합 니 다.
STEP 2.
spring - mvc. xml 에서 locale Resolver bean 설정:
	
	    
	

이렇게 해서 Dispatcher Servlet 는 locale Resolver 를 설치 했다.Session Locale Resolver 의 기능 은 session 에서 특수 한 속성 값 을 찾 는 것 입 니 다. 이 값 은 사용자 가 선택 한 Locale 입 니 다. 발견 하면 이 Locale 을 이번 요청 의 Locale 로 합 니 다.이 를 실현 할 때 로그 인 할 때 session 에 사용자 가 선택 한 Locale 을 설정 할 수 있 습 니 다. Session Locale Resolver 를 추가 하면 Dispatcher Servlet 은 이 사용자 가 요청 할 때마다 이 Locale 을 사용 할 수 있 습 니 다. 그러면 getMessage () 의 Locale 인 자 는 있 습 니 다.
STEP 3.
앞의 두 단 계 는 어렵 지 않 습 니 다. 어 려 운 것 은 어떻게 shiro 와 통합 하 는 것 입 니까?
제 가 썼어 요.
	
	
		
		
		
		
		
			
			    /login = localeFilter, authc
			    /** = user
			
		
	

Shiro Filter Factory Bean 은 Filter 를 자동 으로 발견 하고 Filter 체인 에 넣 는 기능 이 있 습 니 다.여기에 소감 이 있 습 니 다. shiro 에서 인증 은 javax. servlet. Filter 인터페이스 로 이 루어 졌 기 때문에 웹 에서 일반적인 Filter 는 shiro 의 인증 체인 과 잘 통합 되 어 적어도 인터페이스 가 익숙 합 니 다.위 에서 locale Filter bean 을 사용자 정의 하고 / login = locale Filter, authc 로 설정 합 니 다. 이것 은 우리 의 locale Filter 를 먼저 실행 한 다음 shiro 기본 authc 를 실행 하면 session 에 사용자 가 선택 한 언어 를 저장 하 는 곳 인 locale Filter 를 찾 을 수 있 습 니 다.
코드 는 간단 합 니 다:
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) throws IOException, ServletException {

		if (request.getParameter("locale") != null){
			
			HttpServletRequest req = (HttpServletRequest) request;
			HttpSession session = req.getSession();
			Locale locale = null;
			switch (request.getParameter("locale")){
			case "zh_CN":
				locale = Locale.CHINA;
				break;
			case "en_US":
				locale = Locale.US;
				break;
			}
			session.setAttribute(SessionLocaleResolver.LOCALE_SESSION_ATTRIBUTE_NAME, locale);
		}
		chain.doFilter(request, response);
	}

코드 의 기능 은 session 에 사용자 가 선택 한 언어 를 설정 하 는 것 입 니 다.locale Filter 는 authc 뒤에 놓 을 수 없습니다. 기본 authc 가 로그 인 에 성공 하면 뒤의 Filter 체인 이 실행 되 지 않 고 앞 에 만 놓 을 수 있 기 때 문 입 니 다.이렇게 하면 사용자 가 로그 인 할 때 언어 를 선택 할 수 있다.
    왜 이렇게 귀 찮 으 세 요? request 에서 locale 인 자 를 직접 가 져 오 면 되 지 않 겠 습 니까?이것 은 안 됩 니 다. shiro 로그 인 에 성공 하면 로그 인 성공 페이지 url 로 방향 을 바 꿉 니 다. 방향 을 바 꾼 후에 request 는 로그 인 할 때 보 내 는 locale 인 자 를 얻 을 수 없습니다.

좋은 웹페이지 즐겨찾기