0

我目前正在寻找屏蔽 GWT 浏览器 URL。

目前,当我访问应用程序页面时,我的浏览器 URL 如下所示:

http://localhost:8080/app/#!config/users

或者:

http://localhost:8080/app/#!b/reports?7900

我想用某种编码来屏蔽 URL,如下所示:

http://localhost:8080/app/#!config/sdsuwksp

例如Vaadin Framework做的完全一样(Vaadin Demo),但我不知道如何在我的应用程序中获得它。

4

2 回答 2

0

在您的应用程序中,该 URL 已被处理,可能基于com.google.gwt.user.client.History.getToken(). 所以,如果你跑

String token = History.getToken();
String[] params = token.split("/");

在您的示例中,您会得到!configsdsuwksp。我猜!config会识别页面,而sdsuwksp会是一些掩码值。如果此屏蔽值转换为页面(如http://localhost:8080/app/#!config/users),我只能建议不要屏蔽它 -为了 SEO 和可用性,URL 页面名称应该是可读的

但是,在某些情况下,您需要识别某些实体,但又不想公开显示其自动递增的 ID。假设您有一个包含文件数据的数据库,并且您不想在 URL 上显示自动递增的 ID。例如,Google Drive 有这些链接:https://docs.google.com/document/d/1TZplxR3yFGyPcCuaLHKptoVnxL4jOsTEGWFdqMoIu8/edit. 为了实现这一点,我看到了至少 2 个相对简单的解决方案:

  • 使用唯一的随机生成的 ID。在要屏蔽的实体的数据库表中添加一个额外的字段“idTag”,并确保它是唯一的且不为空。这个额外的字段也成为实体的标识符。例如,您可以使用 生成唯一 ID UUID.randomUUID().toString()。然后,您可以创建类似 #!config/users/cd9467cb-064a-4427-987f-738051dc5f79 而不是的 链接#!config/users/34(在自动递增的情况下,每个拥有链接的人都会知道数据库中至少有 34 个用户)。
  • 或者,您的 #!config/ sdsuwksp值可以是加密字符串,然后您可以在每个请求上解密以检查实际请求。您可以使用gwt-crypto。TripleDES 可以在客户端使用。
于 2021-01-06T13:55:58.953 回答
0

我用com.mvp4g.client.history.PlaceService覆盖解决了它。通过覆盖convertTokentokenize方法,我可以屏蔽 GWT 浏览器 URL。

public class MyPlaceService extends PlaceService {

@Override
protected void convertToken(String token) {
    super.convertToken(UrlTokenizer.decode(token));
}

@Override
public String tokenize(String eventName, String param) {
    
    return UrlTokenizer.encode(eventName, param);
}}

最后,在我的 gwt.xml 文件中,我添加了这些行以用我自己的类“替换” PlaceService 类:

<replace-with class="com.comp.app.gwt.mvp4.myPlaceService">
    <when-type-is class="com.mvp4g.client.history.PlaceService" />
</replace-with>
于 2021-01-07T08:11:10.300 回答