Vaadin v20:每次登录应用程序后都会显示奇数页面

问题描述

自从我每次登录应用程序后切换到 Vaadin 20.0.1(从 v18.0.2)以来,我首先会看到一个页面

self.additionalManifestEntries = [
{ url: 'icons/icon-144x144.png',revision: '-1456135562' },{ url: 'icons/icon-192x192.png',revision: '-1333786034' },{ url: 'icons/icon-512x512.png',revision: '1931390955' },{ url: 'icons/icon-16x16.png',revision: '-1417519116' },{ url: 'icons/icon-32x32.png',revision: '-2087744108' },{ url: 'offline-stub.html',revision: '203115787' },{ url: 'manifest.webmanifest',revision: '1979121418' },{ url: './styles/offline.css',revision: '1252570030' },{ url: './images/offline.png',revision: '1252570030' }
];

然后我需要重新加载 URL。这一次(因为我已经登录)它直接将我带到我的应用程序的入口页面,然后一切正常。我还注意到,这仅在第一次登录(即第一个登录用户)时发生,显示的 URL 是:http://localhost:8080/sw-runtime-resources-precache.js

但是上面的内容想传达给我什么?为什么会出现这个? 而且 - 因为这很烦人:我怎么能说“迷路了!” `

后来的附录,因为代码片段太长无法评论

我当前的实现(我从一些 Vaadin 示例中复制的)内容如下:


import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.security.web.savedrequest.HttpSessionRequestCache;

class CustomrequestCache extends HttpSessionRequestCache
{
    @Override
    public void saveRequest(HttpServletRequest request,HttpServletResponse response) {
        if (!SecurityUtils.isFrameworkInternalRequest(request)) {
            /* Saves unauthenticated requests so we can redirect the user to the page they were trying to access once they’re logged in: */
            super.saveRequest(request,response);
        }
    }
}

解决方法

这很可能是由 Spring Security 中的请求缓存引起的,它跟踪在显示登录视图之前发生的最后一个请求,然后假设用户希望在登录后从那里继续。问题是这个特殊的请求是新引入的离线支持的内部特性,而不是用户本身感兴趣的请求。

Vaadin 20 还引入了一个 VaadinWebSecurityConfigurerAdapter 类,您可能想要直接使用它,或者您可以只使用它通过 VaadinDefaultRequestCache 类使用的相同类型的逻辑(或直接使用它类)。