Session GWTP中的服务器会话管理
我对GWTP中的会话管理有一些基本问题Session GWTP中的服务器会话管理,session,gwt,rest,Session,Gwt,Rest,我对GWTP中的会话管理有一些基本问题 现在,我们在用户登录到应用程序时创建一个新会话。现在,我可以打开浏览器,直接用令牌键入应用程序url,而无需登录。它将在不进行任何检查的情况下向用户呈现UI页面。现在,我们在服务器端进行了会话检查。所以,如果UI页面仅在呈现时进行服务器调用,我将知道会话无效,我可以将其重定向到登录页面。但是,我们如何处理UI页面没有任何服务器端逻辑并且用户直接使用该令牌粘贴URL的情况呢 我是否必须对来自GWTP presenter的每个页面请求进行服务器调用才能检查会话
尽管安全性应该始终在服务器端实施,但您可能不希望普通用户浏览您的管理页面。在GWTP中,您可以通过创建自定义的守门人类来防止某些演示者暴露自己
@Singleton
public class LoggedInGatekeeper implements Gatekeeper {
private final CurrentUser currentUser;
@Inject
public LoggedInGatekeeper (
final CurrentUser currentUser ) {
this.currentUser = currentUser;
}
@Override
public boolean canReveal() {
return currentUser.isLoggedIn();
}
}
然后,您只需将@UseGatekeeper
注释添加到要保护的每个演示者的代理:
@ProxyCodeSplit
@NameToken("userSettings")
@UseGatekeeper( LoggedInGatekeeper.class )
public interface MyProxy extends ProxyPlace<MainPagePresenter> {}
@ProxyCodeSplit
@NameToken(“用户设置”)
@UseGatekeeper(LoggedInGatekeeper.class)
公共接口MyProxy扩展了ProxyPlace{}
必须确保自定义Ginject具有getLoggedInGatekeeper()
方法。在Ginject中,您还可以使用@DefaultGatekeeper
方法对get方法进行注释,该方法返回您要用于任何未使用@UseGatekeeper
注释的代理的Gatekeeper类。如果使用@DefaultGatekeeper
并希望指定代理不应使用任何gatekeeper,则在该代理上使用@NoGatekeeper
注释
您必须确保处理错误的演示者没有使用网守,否则您将面临出错的风险。因此,最好使用@NoGatekeeper
注释演示者的代理。演示者处理错误是由自定义PlaceManager的RevealerErrorPlace
方法显示的错误。如果您不重写该方法,那么它就是您的revealDefaultPlace
方法显示的方法
有关更多信息,请参阅。您不需要每次都拨打服务器电话。当你登录时,在登录的keeper类中只设置当前用户一次@UseGatekeeper注释仅检查当前用户实例,不进行任何服务器调用。如果当前用户存在,那么它将从canReveal方法返回true。 它将允许访问url中的presenter name标记 假设您不需要任何会话访问它,那么使用@NoGatekeeper代替它
>> let me know if the understanding is fine with your solution. Also, what about point 2 and 3 questions?
A.1如果没有任何安全问题,您可以使用jsession。
A.2通过使用JSESSION id,您可以将JSESSION id传递给执行服务器调用,因为若服务器将获得相同的会话,那个么它就可以工作 我从上面了解到的是,您必须进行服务器调用,以最终了解用户是否登录,如果我想检查我的应用程序中的所有演示者,那么在每个页面请求上,无论用户是否登录,我们都使用网关守护方法进行服务器调用。让我知道你的理解是否适合你的解决方案。另外,关于第2点和第3点的问题呢?非常感谢您的宝贵意见。我将实现相同的逻辑。我正在等待任何人提出第三个问题,稍后我将结束这个话题。我还有一个非常基本的问题。抱歉,如果这太傻了…我将在完成服务器调用后获取用户对象。但GIN在一开始就已经创建了所有对象,LoggedInGateKeeper将使用null user创建。如何将服务器返回的值注入CurrentUser成员?您只需在登录时为home presenter设置@NoGatekeeper注释。设置登录用户(当前用户bean对象)。我想你会对其他演讲者产生想法,它将为你提供当前用户。注销后分配给当前用户为空。非常感谢。我终于让它工作了。我只是希望有人能对我的最后一点发表评论(RESTfulWS中的会话)