Tag: session

在Java Web App中定义自定义事件/操作/请求以重置会话超时的计时器?

我在eclipse中使用Tomcat 7.0,Spring 4.0.2,Web Module 3.0作为我的Web应用程序。 我在app / web.xml以及tomcat / conf / web.xml中配置了会话超时。 30 我知道tomcat必须重置它的内部计时器来计算这30分钟并使某些事件/动作/请求的会话(会话超时)无效。 我每隔5分钟发送一个名为captureLastActiveTimeForCurrentFile的请求。 所以现在应用服务器永远不会使会话无效,因为我每隔5分钟发送一次请求,所以它会在每5分钟后重置一次会话超时定时器 。 现在我的问题是如何忽略任何特定请求(此处为captureLastActiveTimeForCurrentFile )以重置会话超时计时器 。 这意味着当我发送captureLastActiveTimeForCurrentFile请求时,服务器不能重置它的计时器。 对于所有其他人的请求它应该工作,因为它是如何工作的。 因此,如果我不向服务器发送任何其他(不包括captureLastActiveTimeForCurrentFile )请求,则必须在30分钟后使会话无效。 我能想到的解决方案: – >我将在web.xml文件中配置会话超时很长时间。 – >我将在服务器上的每个请求调用之后捕获一个全局变量中的最后请求时间 ,不包括captureLastActiveTimeForCurrentFile – >我将启动自己的调度程序,它将在每5分钟后运行,它将检查上次请求时间 – 当前时间> 30分钟 ,然后我将手动使会话无效。 但我认为这个解决方案很复杂,性能明智不是一个好主意。 有没有其他方法可以在服务器上配置排除的请求 ,以便服务器将忽略该特定请求。 如果我的任何假设是错误的,请纠正我。 提前致谢。 任何帮助将是欣赏。

Xpages – 获取活动会话数(Lotus Domino 8.5.2)

如何获取Xpage中的活动会话数。 我正在尝试使用托管bean,但它只返回一个奇怪的字符串。 这是简单的代码: import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; 公共类SessionCounterListener实现HttpSessionListener { private static int totalActiveSessions; public static int getTotalActiveSessions(){ return totalActiveSessions; } public void sessionCreated(HttpSessionEvent arg0){ totalActiveSessions ++; System.out.println(“sessionCreated – 将一个会话添加到计数器中”); } public void sessionDestroyed(HttpSessionEvent arg0){ totalActiveSessions–; System.out.println(“sessionDestroyed – 从计数器中扣除一个会话”); } } 我从这里得到了这个。 但是当我调用SessionCounterListener.getTotalActiveSessions() ,它只返回0(无论是否有人登录)。 如果你有时间,可以在这里查看我的测试数据库。 请帮帮我。 非常感谢!

从另一个EAR访问本地会话Bean?

如何在另一个EAR中调用EAR中的本地会话Bean,这两个EAR都部署在同一个Glassfish v3域中? 这是结构: Glassfish v3 Domain1 EAR1 EAR1-EJB.jar class TestSessionBean <– @Stateless common.jar interface TestSessionLocal <– @Local EAR2 EAR2-EJB.jar class TestSessionBeanClient <– @Singleton, @LocalBean common.jar interface TestSessionLocal <– @Local TestSessionBean实现了TestSessionLocal,两个EAR都有common.jar。 我需要使用TestSessionBeanClient中的TestSessionBean。 我想利用本地会话bean因为性能。 我知道我不能在TestSessionBeanClient中使用简单的@EJB调用,所以我尝试像这样查找: InitialContext ic = new InitialContext(); TestSessionLocal tsl = ic.lookup(“java:global/EAR1/EAR1-EJB/TestSessionBean!org.test.TestSessionLocal”); 这将抛出ClassCastException,因为返回的对象不是TestSessionLocal,而是代理类,如: TestSessionLocal_1389930137 为了能够调用它的方法,我必须做反思才能找到它的方法。 请帮忙。 先谢谢你。

为什么在JAVA中session.invalidate()之后会话不为空?

在开发JavaEE WEB应用程序时,我面临着非常奇怪的问题。 甚至在使用session.invalidate();使HttpSession无效之后session.invalidate(); ,我没有得到会话null 。 有一种情况,我在执行无效会话后有一个如下执行的语句。 if (null != session && null != session.getAttribute(“loginToken”)){ //do something } 我没有在这里获得会话null因此第二个条件将尝试执行。 因此session不为null,因此我收到IllegalStateException – session is already invalidated 。 但是为什么会话在使其失效后不为空? 🙁

在2个子域之间共享会话数据

我使用tomcat 7.0.6与jdk 1.6.0_22 是否可以使用公共子域(例如a.mydomain.com和b.mydomain.com)在两个不同的域之间共享会话数据? 使用默认的java servlet,a.mydomain.com和b.mydomain.com会获得不同的会话,但是无法为mydomain.com中的所有子域创建共享会话吗? 问题是我不直接控制commen子域(mydomain.com)所以我不能从mydomain.com服务任何servlet

Java:跟踪用户登录会话 – 会话EJB与HTTPSession

如果我想使用我的Web应用程序跟踪每个客户端的会话状态,那么更好的选择 – 会话Bean还是HTTP会话 – 要使用? 使用HTTP会话: //request is a variable of the class javax.servlet.http.HttpServletRequest //UserState is a POJO HttpSession session = request.getSession(true); UserState state = (UserState)(session.getAttribute(“UserState”)); if (state == null) { //create default value .. } String uid = state.getUID(); //now do things with the user id 使用Session EJB: 在ServletContextListener的实现中,在WEB-INF/web.xml注册为Web应用程序侦听器: //UserState NOT a POJO this […]

hibernate session.save()没有反映在数据库中

据我对hibernate的理解(请确认) 1-如果你通过getSessionFactory().openSession()得到它,你必须使用session.close() getSessionFactory().openSession() 。 2-如果你通过getSessionFactory().getCurrentSession()得到它,则不需要session.close() getSessionFactory().getCurrentSession() 。 它在commit()后自动关闭。 3- @ 2当使用getSessionFactory().getCurrentSession() ,我们必须在活动事务中执行所有数据库活动,以便最后可以提交()。 4- Hibernate使所有保存,更新和删除操作入队,并且只有在执行flush()操作或提交事务或关闭发生这些操作的会话后才将它们提交给数据库服务器。(根据javadoc) 从以上几点来看,如果我考虑1和4 ,那么下面的代码应该可以工作: Session session = HibernateUtil.getSessionFactory().openSession(); AccountDetails ac = new AccountDetails(); //perform set operations session.save(ac); session.close(); System.out.println(“new account stored.”); 但它没有工作,即它运行平稳但不反映(存储)在数据库中。为什么会这样? 当我在事务中编写代码并提交时,它就会被存储。 我想我错过了一件基本的事情。 请澄清。

如何检查会话是否无效

如何检查会话是否无效? API中没有方法。 它和isNew()吗? 如果没有,有什么区别?

如何使用ognl更改会话范围属性?

是否可以使用ognl更改会话范围属性? 例如,如果我在会话中有一个名为PROCESS_CONFIG的属性,它是一个具有属性name的对象,那么如何在JSP上更改此属性name ? 我尝试了以下但它不起作用: 当我提交表单并在我的操作中访问会话对象时,通过ServletActionContext.getRequest().getSession().getAttribute(“PROCESS_CONFIG”) ,属性name没有改变。 编辑: 在会话中保存为PROCESS_CONFIG的对象是一个非常深的复杂对象(由对其他对象的大量引用组成,包含对象列表),在我的视图中,我只想呈现其属性的一个非常小的子集 (包括来自的属性)它的组成对象)。 因此,将所有其他字段隐藏在我的JSP中是不切实际的! 有问题的视图是一个可以更改这些字段值的表单,我希望直接并自动更新我的struts 2会话上保存的对象PROCESS_CONFIG ,就像PROCESS_CONFIG对象是我的操作的属性一样。 例如,给定前面的代码片段, PROCESSNAME是PROCESS_CONFIG对象的一个​​属性,我想在PROCESS_CONFIG对象中自动更新它,而不是在我的操作上有一个PROCESSNAME属性,然后必须在我的PROCESS_CONFIG对象上显式设置PROCESSNAME 。

如何在调用HttpServletResponse.encodeURL()时将Tomcat配置为不将会话ID编码到URL中

看起来像一个愚蠢的问题,答案是“不要使用encodeURL()!” 但是我正在使用在JSP中使用netui锚标签的代码库,我需要禁用将JSESSIONID写入URL,因为这是一个安全风险。 在WebLogic中,您可以通过在weblogic.xml中配置url-rewriting-enabled来配置它(我知道,因为我在WebLogic服务器中编写了该function!)。 但是,我找不到Tomcat的等效配置选项。