如何在时间段为 30 分钟的春季实现会话管理

Posted

技术标签:

【中文标题】如何在时间段为 30 分钟的春季实现会话管理【英文标题】:How to implement session management in spring with time period 30 minute 【发布时间】:2018-04-11 07:19:06 【问题描述】:

在我的帖子中,我尝试了简单的登录功能,无论用户是否有效。如果用户有效,我必须实施 30 分钟的会话功能, 如果用户在 30 分钟之前没有做任何事情,如何让他退出,他必须使用用户名和密码登录。谁能解释一下我如何在 Spring mvc 中实现会话管理,上述要求会话时间为 30 分钟?

AppConfig

@Configuration
@PropertySource("classpath:spring.properties")    
@EnableWebMvc
@ComponentScan(basePackages = "com.spring")
public class AppConfig extends WebMvcConfigurerAdapter 
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) 
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    

    @Bean
    public ViewResolver viewResolver() 
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");    
        return viewResolver;
    
    @Bean
    public ResourceBundleMessageSource messageSource() 
        ResourceBundleMessageSource rb = new ResourceBundleMessageSource();
        rb.setBasenames(new String[]  "messages/messages", "messages/validation" );
        return rb;
        
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) 
        configurer.enable();
        

AppInitializer

public class AppInitializer implements WebApplicationInitializer 
    public void onStartup(ServletContext container) throws ServletException 
        AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
        ctx.register(AppConfig.class);
        ctx.setServletContext(container);
        ServletRegistration.Dynamic servlet = container.addServlet("dispatcher", new DispatcherServlet(ctx));
        servlet.setLoadOnStartup(1);
        servlet.addMapping("/");
    

控制器

@RequestMapping(value = "/authenticateUserLogin", method = RequestMethod.POST)
    public ModelAndView authenticateUserLogin(@ModelAttribute("loginForm") @Validated User user, BindingResult result, Model model, final RedirectAttributes redirectAttributes) 

        if(user.getEmail().equals("abc") && user.getPassword().equals("123"))
        return new ModelAndView("Dashboard", "name", model);
        
        else
        
        return new ModelAndView("Login", "name", model);
           
    

【问题讨论】:

【参考方案1】:

在this 回答中解释了如何通过 java config 或 xml config 进行操作。

【讨论】:

在那个例子中会话创建和销毁在那里,我没有发现任何会话超时约束 您是否检查了接受的答案,该答案表示要设置会话超时,您需要在 web.xml 中添加以下内容(或任何替代方法,具体取决于您如何配置应用程序):<session-config> <session-timeout>20</session-timeout> </session-config>

以上是关于如何在时间段为 30 分钟的春季实现会话管理的主要内容,如果未能解决你的问题,请参考以下文章

从春季安全会话序列化中排除属性?

春季安全并发会话不起作用

VMware vRealize Operations 闲置 30 分钟后会出现 UI 会话超时

如何在 30 分钟后使 PHP 会话过期?

PHP - 将会话变量设置为在 30 分钟后过期 [重复]

在 GA360 Bigquery 数据中,用户访问如何分解为 GA360 会话?