当前位置: 首页 > 面试题库 >

在基于Spring的Web应用程序中处理会话过期事件

长孙淳
2023-03-14
问题内容

我在我的应用程序中使用Spring安全功能,但是我发现,当会话过期时,所有请求ajax返回页面login.jsp(不重定向,在http响应中,它放置所有html内容)即登录页面我的webapp。我在应用程序中使用了很多ajax请求,目标是返回某些错误代码,例如510,而不是登录页面。

<session-management session-authentication-strategy-ref="example" />

没有invalid-session-url,我试图使invalid-session-url =“”,不起作用。非常感谢


问题答案:

使用自定义AuthenticationEntryPoint:

package com.example.spring.security
// imports here

public class AjaxAwareAuthenticationEntryPoint
     extends LoginUrlAuthenticationEntryPoint {

  public AjaxAwareAuthenticationEntryPoint(final String loginFormUrl) {
    super(loginFormUrl);
  }

  @Override
  public void commence(final HttpServletRequest request, final HttpServletResponse response, final AuthenticationException authException)
      throws IOException, ServletException {

    if ("XMLHttpRequest".equals(request.getHeader("X-Requested-With"))) {
      response.sendError(403, "Forbidden");
    } else {
      super.commence(request, response, authException);
    }
  }
}

定义一个bean并entry-point- ref<http>element中使用它:

<http entry-point-ref="authenticationEntryPoint">
  <!-- more configuration here -->
</http>

<bean id="authenticationEntryPoint"
   class="com.example.spring.security.AjaxAwareAuthenticationEntryPoint">
 <constructor-arg value="/login.jsp"/>
</bean>


 类似资料:
  • 问题内容: 我想实现一个基于Redis的会话存储。我想将会话数据放入Redis。但是我不知道如何处理会话过期。我可以遍历所有redis密钥(sessionid)并评估上次访问时间和最大空闲时间,因此我需要将所有密钥加载到客户端中,并且可能有1000m会话密钥,并且可能导致非常差的I / O表演。 我想让Redis管理过期,但是密钥过期时没有侦听器或回调,因此无法触发HttpSessionListe

  • 问题内容: 这个问题与我的另一个问题“ 当JavaWeb应用程序中的Session过期时如何重定向到登录页面? ”有关。以下是我要执行的操作: 我有一个在JBoss AS 5上运行的JSF Web应用程序 当用户闲置15分钟(例如15分钟)时,如果他在会话到期后尝试使用该应用程序,则需要注销该用户并将其重定向到登录页面。 因此,如“ JSF注销和重定向 ”中的建议,我实现了一个过滤器,该过滤器可检

  • Javaworld Hibernate入门教程状态: 会话的实例是轻量级的,并且创建和销毁的成本很低。这很重要,因为您的应用程序需要一直创建和销毁会话,也许是在每次请求时。Hibernate会话不是线程安全的,根据设计,一次只能由一个线程使用。 由于Tomcat在多个线程中处理HTTP请求,因此线程安全在Web应用程序中是非常必要的。因此,我在回答中读到: 会话应该是每个方法的局部变量。通过这样做

  • 本文向大家介绍基于Spring Boot保护Web应用程序,包括了基于Spring Boot保护Web应用程序的使用技巧和注意事项,需要的朋友参考一下 如果在类路径上添加了Spring Boot Security依赖项,则Spring Boot应用程序会自动为所有HTTP端点提供基本身份验证。端点“/”和“/home”不需要任何身份验证。所有其他端点都需要身份验证。 要将Spring Boot S

  • 我有一个MQ Spring Boot PaaS应用程序,需要通过一个通用的异常处理程序类(GlobalExceptionHandler)实现异常处理。我的PaaS应用程序从源队列接收消息,通过spring jpa执行一些数据库操作,并将响应写回目标队列。

  • 我有一个简单的Spring-Boot应用程序,它只使用AMQP依赖项(仅-例如,没有web依赖项,所以JAR中没有包含应用服务器)。 我只想让应用程序运行并监听队列,并在收到消息时将一些信息记录到DB中--然而,由于没有应用程序服务器,它一启动就会再次关闭(因为什么都没有做)。在监听消息的同时,是否有一种最好的方法来保持应用程序的运行? 代码中没有什么令人惊讶的地方,只是标准的应用程序配置,然后还