0

全部!注销后,用户也在我创建的用 gwt 和 java 开发的网站中执行操作,我必须编写什么代码来阻止该用户?我的意思是如何编写代码来防止“注销”后的用户操作。每当用户在注销后点击页面上的任何链接时,他应该看到消息“您尚未登录查看”,这是我的要求。有人可以说吗?....谢谢巴拉...

4

5 回答 5

1

如果您使用活动和地点方法来构建您的网站。然后在每个活动开始时,您应该检查会话是否仍然有效。如果没有,那么您可以使用 goTo(new LoginPlace("login")) 或者您可以使用重定向方法重定向到您的 loginURL。

于 2012-11-29T08:19:31.143 回答
1

您需要将他重定向到您的注销页面/url,然后使他的 servlet 会话无效。

1) Servlet 过滤器,您可以使用httpServletRequest.getSession().invalidate(). http://viralpatel.net/blogs/http-session-handling-tutorial-using-servlet-filters-session-error-filter-servlet-filter/

或者

2) 通过一个简单的 servlet - Servlet 会话无效

于 2012-11-29T09:00:18.387 回答
1

看看这个链接 这解释了你如何使用 GWT 编写登录应用程序

或者在代码中..如果你有 MyProfilePlace,MyProfileView 那么 MyProfileActivity 看起来像

private ClientFactory clientFactory;

      public MyProfileActivity(MyProfilePlace place, ClientFactory clientFactory) {

    this.clientFactory = clientFactory;

 }

@Override
public void start(AcceptsOneWidget containerWidget, EventBus eventBus) {

            //pseudo code
    if (session invalidated {
        Window.alert("Sorry you are not logged in");
        goTo(new LoginPlace("login"));
    }

    view = clientFactory.getMyProfileView();
    view.setPresenter(this);
    containerWidget.setWidget(view.asWidget());
    System.out.println("Going to your profile");
}
于 2012-11-29T10:16:37.580 回答
0

考虑一下实际上是什么会话......
现在,请记住维护会话的常见(不是唯一)方式是什么。

也许您会记得 cookie 之类的东西 - 如果您(尝试)删除/删除/清除服务器上的会话并清除客户端的 cookie,您将有效地终止/删除会话。

于 2012-11-27T09:25:13.417 回答
0

考虑当用户单击屏幕上的按钮时的这种情况。您可以点击服务器并检查会话是否处于活动状态。

(您可以使用 jquery 来做到这一点)

$('button').click(function(){

//进行ajax调用并检查会话是否处于活动状态

});

与此交替,

方法可以是定期检查服务器,如果会话有效。这将需要 Servlet 方法来检查它,这将导致许多服务器跳闸。

另一种方法可以使客户端的计时器与服务器的计时器保持同步。

客户端代码:

import com.google.gwt.user.client.Timer;

公共类计时器{

private static final Timer SESSION_MAY_HAVE_EXPIRED = new Timer() {

    @Override
    public void run() {
        // The session may have expired.
        // Go to Login
    }
};

public static void renewSessionTimer() {

    // First cancel the previous timer
    SESSION_MAY_HAVE_EXPIRED.cancel();

    // Schedule again for 5 minutes
    SESSION_MAY_HAVE_EXPIRED.schedule(5 * 60 * 1000);
}

}

当客户端执行 RPC 调用时,服务器会话超时将被更新。

在客户端,然后您编写任何操作失败的代码。

假设点击我的 profile.myprofileService 被调用。然后你可以添加

myProfileService.getUserProfile(...) {

 @Override
 public void onSuccess(String result) {

      ClientTimers.renewSessionTimer();

      // Show user profile
 }

 @Override
 public void onFailure(Throwable caught) {

      if (sessionTimedOut()) {

          // redirect to login

      }   

}

}

我希望这有帮助。干杯:)

于 2012-11-30T06:55:57.523 回答