监听器、拦截器完成对session、cookie的会话控制

博客包含web.xml和spring.xml相关内容,为转载自https://www.cnblogs.com/qinyios/p/11167346.html的信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package com.trsmedia.interceptor;

import java.util.Date;

import java.util.Timer;
import java.util.TimerTask;


import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;



/**
 * 
 *  @author   : qinyi
 *  date	   : 2019年7月10日,下午1:58:30

 */
public class MySessionListener  implements HttpSessionListener {

	public void sessionCreated(final HttpSessionEvent se) {
		
		
		
		Timer t = new Timer();
		t.schedule(new TimerTask() {
		public void run() {
			HttpSession session = se.getSession();

			System.out.print("del..."+new Date());
			
			session.invalidate();
		}
		}, 1000*60*10, 1000*60*10);

		}  
		     

	
		public void sessionDestroyed(HttpSessionEvent se) {

		// TODO Auto-generated method stub

		   

		} 

}

  

package com.trsmedia.interceptor;

import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletRequestEvent;
import javax.servlet.ServletRequestListener;
import javax.servlet.http.HttpServletRequest;


/**
 * 
 *  @author   : qinyi
 *  date	   : 2019年7月10日,下午4:28:11

 */
public class MyRequestContextListener implements ServletRequestListener {

	@Override
	public void requestDestroyed(final ServletRequestEvent sre) {
		// TODO Auto-generated method stub

    	
    	
		Timer t = new Timer();
		t.schedule(new TimerTask() {
		public void run() {
			HttpServletRequest request = (HttpServletRequest) sre.getServletRequest();
			
	    	javax.servlet.http.Cookie[]cookies=request.getCookies();
	    	if(cookies!=null){
	    	for(javax.servlet.http.Cookie c:cookies){
	    		System.out.println("正再删除"+c.getName());
	    		c.setMaxAge(0);
	    	}
	    	}
		}
		}, 1000*60*10, 1000*60*10);

		}  
	

	@Override
	public void requestInitialized(ServletRequestEvent sre) {
		// TODO Auto-generated method stub
		
	}



}

  web.xml

          <listener>
        <listener-class>com.trsmedia.interceptor.MyRequestContextListener</listener-class>
    </listener>      
        <listener>
        <listener-class>com.trsmedia.interceptor.MySessionListener</listener-class>
    </listener>

  

package com.trsmedia.interceptor;

import java.util.List;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;

/**
 * 
 *  @author   : qinyi
 *  date	   : 2019年7月9日,下午10:59:49

 */
public class LoginInterceptor extends HandlerInterceptorAdapter {
	 private List<String> IGNORE_URI;

	    @Override
	    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
	     

	        HttpSession session = request.getSession();
	        if(session != null && session.getAttribute("UserInfo") != null){ 
	            return true;
	        }else{
	            response.sendRedirect("main.jsp");
	            return false;
	        }
	    }

	    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
	        super.postHandle(request, response, handler, modelAndView);
	    }
public List<String> getIGNORE_URI() {
	    return IGNORE_URI;
	}
public void setIGNORE_URI(List<String> IGNORE_URI) {
	    this.IGNORE_URI = IGNORE_URI;
	}


}

  spring.xml

  <mvc:interceptors>
        
        <mvc:interceptor>
            
            <mvc:mapping path="/**"/>
         
            <mvc:exclude-mapping path="/static/**"/>
            <mvc:exclude-mapping path="/nosso.do"/>
            <mvc:exclude-mapping path="/nosso.jsp"/>
            <mvc:exclude-mapping path="/main.jsp"/>
            <mvc:exclude-mapping path="/login.do"/>
             <mvc:exclude-mapping path="/logout.do"/>
            
            <mvc:exclude-mapping path="/loginChoose.do"/>
            <bean id="loginInterceptor" class="com.trsmedia.interceptor.LoginInterceptor">
              
            </bean>
        </mvc:interceptor>
    </mvc:interceptors>

  

转载于:https://www.cnblogs.com/qinyios/p/11167346.html

<think>好的,我现在需要帮助用户解决关于Spring MVC框架中LocaleChangeInterceptor拦截器的配置和使用问题。用户提到他们参考了站内的三篇引用内容,其中提到了SessionLocaleResolver和LocaleChangeInterceptor的组合使用。我需要结合这些信息,提供一个结构清晰的中文回答,并按照用户的要求生成相关问题。 首先,我需要回忆一下Spring MVC国际化的基本配置。通常,国际化需要LocaleResolver来解析用户的区域设置,以及LocaleChangeInterceptor拦截器来根据请求参数切换区域。用户提到的SessionLocaleResolver应该是将区域信息存储在会话中,而LocaleChangeInterceptor会监听特定的请求参数来改变区域设置。 接下来,我需要确认配置步骤。根据引用中的代码示例,用户可能已经在Controller中有一个处理i18n请求的方法,返回登录页面。配置拦截器通常是在Spring的配置文件中添加,比如XML配置或者Java配置。需要详细说明如何注册LocaleChangeInterceptor,设置paramName,以及如何配置SessionLocaleResolver。 然后,关于使用方式,需要说明在页面上如何通过传递参数(如?lang=en_US)来切换语言。同时,要提到需要准备对应的资源文件,比如messages.properties、messages_en.properties等,并确保它们位于类路径下。 还需要注意一些细节,比如拦截器的paramName默认是"locale",但可以自定义;如果使用其他LocaleResolver,比如CookieLocaleResolver,配置方式类似。此外,要确保拦截器被正确添加到处理流程中,避免被其他配置覆盖。 最后,生成的相关问题应该围绕配置的其他方式、其他LocaleResolver、资源文件加载原理以及常见问题处理。这些问题需要自然衔接,覆盖用户可能进一步感兴趣的方面。 在整理回答时,要确保使用正确的中文术语,代码块用反引号包裹,行内公式使用$...$,独立公式用$$...$$(虽然这个问题可能不需要数学公式,但需要遵循用户格式要求)。同时,引用的部分需要在末尾添加引用标识,如[^1]、[^2]等。 现在,我需要将以上思考整理成一个步骤分明的回答,确保每个部分清晰,并包含代码示例和配置说明,最后附上相关问题。</think>### Spring MVC中LocaleChangeInterceptor的配置与使用 在Spring MVC框架中,`LocaleChangeInterceptor` 是实现国际化的关键组件,通过与 `SessionLocaleResolver` 结合,可动态切换用户的语言环境。以下是具体配置步骤和使用方法: --- #### **1. 配置SessionLocaleResolver** 首先需定义 `SessionLocaleResolver` 作为区域解析器,将用户的语言设置存储在会话Session)中。在Spring配置文件中添加以下内容(XML或Java配置均可): **XML配置示例:** ```xml <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver"> <property name="defaultLocale" value="zh_CN"/> <!-- 设置默认语言 --> </bean> ``` **Java配置示例(通过@Bean注解):** ```java @Bean public LocaleResolver localeResolver() { SessionLocaleResolver resolver = new SessionLocaleResolver(); resolver.setDefaultLocale(Locale.CHINA); // 默认语言 return resolver; } ``` --- #### **2. 注册LocaleChangeInterceptor拦截器** 添加 `LocaleChangeInterceptor` 到Spring MVC的拦截器链中,用于监听请求参数并切换语言环境。 **XML配置示例:** ```xml <mvc:interceptors> <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"> <property name="paramName" value="lang"/> <!-- 指定触发语言切换的请求参数 --> </bean> </mvc:interceptors> ``` **Java配置示例(通过实现WebMvcConfigurer):** ```java @Override public void addInterceptors(InterceptorRegistry registry) { LocaleChangeInterceptor interceptor = new LocaleChangeInterceptor(); interceptor.setParamName("lang"); // 默认参数名为"locale",此处自定义为"lang" registry.addInterceptor(interceptor); } ``` --- #### **3. 使用方式** 在页面中通过URL参数触发语言切换。例如: - 切换为英文:`http://example.com/i18n?lang=en_US` - 切换为中文:`http://example.com/i18n?lang=zh_CN` 拦截器会自动解析 `lang` 参数,并更新会话中的 `Locale` 信息。 --- #### **4. 资源文件配置** 需在 `src/main/resources` 下创建国际化资源文件,命名规则为 `messages_语言_国家.properties`: - `messages.properties`(默认) - `messages_en_US.properties`(美式英语) - `messages_zh_CN.properties`(简体中文) 文件内容示例(`messages_zh_CN.properties`): ```properties welcome.message=欢迎登录 ``` --- #### **注意事项** 1. **参数名称自定义**:可通过 `setParamName` 修改拦截器监听的参数名,需与前端传递的参数一致。 2. **其他LocaleResolver**:若使用 `CookieLocaleResolver`,配置方式类似,但语言信息会存储在Cookie中而非Session[^3]。 3. **拦截器顺序**:确保 `LocaleChangeInterceptor` 在其他拦截器之前注册,避免参数被其他逻辑处理。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值