如何用gwt屏蔽浏览器url

rslzwgfq  于 2021-06-27  发布在  Java
关注(0)|答案(2)|浏览(274)

我目前正在寻找屏蔽gwt浏览器的网址。
当前,当我访问应用程序页时,我的浏览器url如下所示:

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

或:

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

我想用这样的编码来屏蔽URL:

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

例如,vaadin框架做了完全相同的工作(vaadin demo),但是我不知道如何在我的应用程序中获得它。

pkmbmrz7

pkmbmrz71#

我用一个简单的方法解决了这个问题 com.mvp4g.client.history.PlaceService 覆盖。通过覆盖 convertToken 以及 tokenize 方法我可以屏蔽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>
dfddblmv

dfddblmv2#

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

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

在你的例子里,你得到了!配置和sdsuwksp。我想是吧!config将标识该页,而sdsuwksp将是一些被屏蔽的值。如果这个屏蔽值转换为页面(如 http://localhost:8080/app/#!config/users ),我只能建议不要遮掩它-网址页面名称应该是可读的seo和可用性的原因。
但是,在某些情况下,您需要标识某个实体,但不希望公开显示其自动递增的id。假设您有一个包含文件数据的数据库,并且不希望在url上显示自动递增的id。例如,google drive有以下链接: https://docs.google.com/document/d/1TZplxR3yFGyPcCuaLHKptoVnxL4jOsTEGWFdqMoIu8/edit . 为了实现这一点,我至少看到了两个相对简单的解决方案:
使用随机生成的唯一id。向要屏蔽的实体的数据库表中添加一个额外字段“idtag”,并确保该字段唯一且不为空。这个额外的字段也将成为实体的标识符。您可以使用 UUID.randomUUID().toString() ,例如。然后你可以创建如下链接 #!config/users/cd9467cb-064a-4427-987f-738051dc5f79 而不是 #!config/users/34 (在自动递增的情况下,每个有链接的人都知道数据库中至少有34个用户)。
或者,你的#!config/sdsuwksp值可以是一个加密的字符串,您可以对每个请求进行解密以检查实际请求。你可以用gwt加密。客户端可以使用tripledes。

相关问题