我目前正在寻找屏蔽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),但是我不知道如何在我的应用程序中获得它。
pkmbmrz71#
我用一个简单的方法解决了这个问题 com.mvp4g.client.history.PlaceService 覆盖。通过覆盖 convertToken 以及 tokenize 方法我可以屏蔽gwt浏览器的url。
com.mvp4g.client.history.PlaceService
convertToken
tokenize
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>
dfddblmv2#
在您的应用程序中,url已经被处理,可能是基于 com.google.gwt.user.client.History.getToken() . 所以,如果你跑
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。
https://docs.google.com/document/d/1TZplxR3yFGyPcCuaLHKptoVnxL4jOsTEGWFdqMoIu8/edit
UUID.randomUUID().toString()
#!config/users/cd9467cb-064a-4427-987f-738051dc5f79
#!config/users/34
2条答案
按热度按时间pkmbmrz71#
我用一个简单的方法解决了这个问题
com.mvp4g.client.history.PlaceService
覆盖。通过覆盖convertToken
以及tokenize
方法我可以屏蔽gwt浏览器的url。最后,在我的gwt.xml文件中,我添加了以下行,用我自己的类“替换”placeservice类:
dfddblmv2#
在您的应用程序中,url已经被处理,可能是基于
com.google.gwt.user.client.History.getToken()
. 所以,如果你跑在你的例子里,你得到了!配置和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。