全部!注销后,用户也在我创建的用 gwt 和 java 开发的网站中执行操作,我必须编写什么代码来阻止该用户?我的意思是如何编写代码来防止“注销”后的用户操作。每当用户在注销后点击页面上的任何链接时,他应该看到消息“您尚未登录查看”,这是我的要求。有人可以说吗?....谢谢巴拉...
5 回答
如果您使用活动和地点方法来构建您的网站。然后在每个活动开始时,您应该检查会话是否仍然有效。如果没有,那么您可以使用 goTo(new LoginPlace("login")) 或者您可以使用重定向方法重定向到您的 loginURL。
您需要将他重定向到您的注销页面/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 会话无效
看看这个链接 这解释了你如何使用 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");
}
考虑一下实际上是什么会话......
现在,请记住维护会话的常见(不是唯一)方式是什么。
也许您会记得 cookie 之类的东西 - 如果您(尝试)删除/删除/清除服务器上的会话并清除客户端的 cookie,您将有效地终止/删除会话。
考虑当用户单击屏幕上的按钮时的这种情况。您可以点击服务器并检查会话是否处于活动状态。
(您可以使用 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
}
}
}
我希望这有帮助。干杯:)