Java设置session超时的三种方式及自定义session监听

1.web容器设置(以tomcat为例)

在tomcat\conf\web.xml中设置,tomcat默认session超时时间为30分钟,可以根据需要修改,负数或0为不限制session失效时间。

    <session-config>
        <session-timeout>30</session-timeout>
    </session-config>

2.在工程的web.xml中设置

	<!-- 时间单位为分钟 -->
	<session-config>
		<session-timeout>15</session-timeout>
	</session-config>

3.通过java代码设置

    public void setMaxInactiveInterval(int interval);//时间单位为秒

三种方式的优先级为1<2<3

session 在tomcat重启后一般也不会失效,关闭浏览器后,session失效 。             

在一般系统中,也可能需要在session失效后做一些操作:
  (1)控制用户数,当session失效后,系统的在线用户数减少一个,控制用户数在一定范围内,确保系统的性能。
  (2)session失效,把用户对象移除,提示用户重新登录

那么如何在session失效后,进行一系列的操作呢?
  这里就需要用到监听器了,即当session因为各种原因失效后,监听器就可以监听到,然后执行监听器中定义好的程序就可以了。
  监听器类为:HttpSessionListener类,有sessionCreated和sessionDestroyed两个方法 ,自己可以继承这个类,然后分别实现。
  sessionCreated指在session创建时执行的方法
  sessionDestroyed指在session失效时执行的方法

以下以session失效移除用户对象为例:

session监听SessionListener 类

import com.csii.pe.accesscontrol.ResourceList;
import com.csii.pe.core.User;
import java.util.Enumeration;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.context.WebApplicationContext;

public class SessionListener implements HttpSessionListener {
	private ResourceList resourceList = null;
	protected Log log = LogFactory.getLog(super.getClass());

	public void sessionCreated(HttpSessionEvent arg0) {
	}

	public void sessionDestroyed(HttpSessionEvent arg0) {
		try {
			HttpSession session = arg0.getSession();
			User user = (User) session.getAttribute("_USER");

			if (this.resourceList == null) {
				init(session);
			}

			if ((user != null) && (!(user.isLogout())))
				this.resourceList.remove(user.getUniqueId());
		} catch (Exception e) {
			this.log.error("_remove user", e);
		}
	}

	public void init(HttpSession session) {
		Enumeration en = session.getServletContext().getAttributeNames();

		while (en.hasMoreElements()) {
			String attribName = (String) en.nextElement();
			Object attrib = session.getServletContext().getAttribute(attribName);
			if (attrib instanceof WebApplicationContext) {
				WebApplicationContext wb = (WebApplicationContext) attrib;

				this.resourceList = ((ResourceList) wb.getBean("successUserRegistry"));
			}
		}
	}
}

监听器在web.xml中声明

	<listener>
		<listener-class>com.test.SessionListener</listener-class>
	</listener>

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中,可以使用session来实现登录功能。通过session,可以在用户登录后将用户信息保存在服务器端,以便在用户的后续请求中进行验证和识别。 首先,在用户登录成功后,可以将用户信息存储在session中。可以使用以下代码获取当前session对象并设置用户名属性: ```java session.setAttribute("username", username); ``` 其中,`username`是用户的用户名。 在其他需要验证用户登录状态的地方,可以通过以下代码获取session对象,并检查是否存在用户名属性: ```java HttpSession session = request.getSession(false); if (session == null || session.getAttribute("username") == null) { // 用户未登录,跳转到登录页面 response.sendRedirect("login.jsp"); } else { // 用户已登录,可以使用session对象获取用户信息 String username = (String) session.getAttribute("username"); // 其他操作 } ``` 这段代码首先尝试获取当前session对象,如果session不存在或者session中不存在用户名属性,则说明用户未登录,可以将用户重定向到登录页面。如果session存在且用户名属性存在,则说明用户已登录,可以使用session对象获取用户信息。 需要注意的是,为了保证安全性,建议设置session超时时间。可以在web.xml文件中配置session超时时间,例如设置为30分钟: ```xml <session-config> <session-timeout>30</session-timeout> </session-config> ``` 另外,为了监听session的创建和销毁事件,可以创建一个实现`HttpSessionListener`接口的类,并在其中重写`sessionCreated`和`sessionDestroyed`方法。在`sessionCreated`方法中,将session对象添加到一个自定义的`SessionBroadcaster`中,在`sessionDestroyed`方法中,将session对象从`SessionBroadcaster`中移除。这样可以在其他应用系统中获取session对象时进行检查和使用。 总结起来,使用session实现登录功能的步骤包括: 1. 在用户登录成功后,将用户信息存储在session中。 2. 在需要验证用户登录状态的地方,获取session对象并检查是否存在用户名属性,进行相应的跳转或操作。 3. 设置session超时时间以保证安全性。 4. 可选:创建一个实现`HttpSessionListener`接口的类,监听session的创建和销毁事件,并在其中处理相应的逻辑。 希望以上信息对您有所帮助! #### 引用[.reference_title] - *1* *3* [实现登录功能 (会话机制session)](https://blog.csdn.net/molu1991/article/details/124062278)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[Java实现单点登录session ]](https://blog.csdn.net/sqL520lT/article/details/131181807)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值