春季在每个请求上刷新cookie

Ars*_*jum 1 spring spring-security spring-boot

我有一个将会话超时设置为1小时的应用程序。但是我不希望用户关闭浏览器然后再次打开它,而必须再次登录。为此,我需要一种方法以某种方式刷新每个请求的cookie到期时间。

我正在使用具有弹簧安全性的弹簧靴。如何实现此功能。

Ars*_*jum 5

我已经使用拦截器解决了。这个想法是拦截http请求并修改jsessionid cookie,并将到期时间设置为所需的任何值。一旦重新打开cookie,浏览器就可以重用它。默认情况下,jsessionid cookie的最大寿命等于-1,这意味着它的cookie将在关闭浏览器后立即失效。

public class CookieExpiryRefresher extends HandlerInterceptorAdapter {


    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, //
                           Object handler, ModelAndView modelAndView) throws Exception {


        Cookie[] cookies = request.getCookies();

        for (Cookie cookie : cookies){
            if (cookie.getName().contentEquals("JSESSIONID")){
                if (cookie.getValue().contentEquals(request.getSession().getId())){
                    cookie.setMaxAge(60*60*5);
                    cookie.setPath("/");
                    response.addCookie(cookie);
                    break;
                }
            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

并可以按以下方式注册此拦截器:

@Component
public class WebMvcConfig extends WebMvcConfigurerAdapter{

    @Override
    public void addInterceptors(InterceptorRegistry registry){

        registry.addInterceptor(new CookieExpiryRefresher());
    }
}
Run Code Online (Sandbox Code Playgroud)