Java struts2会话超时重新登录到上次访问的页面
我的应用程序是使用Struts2开发的,我有一个拦截器,根据会话属性验证用户是否登录。现在让我们假设会话超时,用户尝试再次登录。登录成功后,我如何处理重新登录的用户并引导用户返回到他们工作的最后一个页面…比如page3.jsp loginInterceptor是Java struts2会话超时重新登录到上次访问的页面,java,jsp,jakarta-ee,struts2,Java,Jsp,Jakarta Ee,Struts2,我的应用程序是使用Struts2开发的,我有一个拦截器,根据会话属性验证用户是否登录。现在让我们假设会话超时,用户尝试再次登录。登录成功后,我如何处理重新登录的用户并引导用户返回到他们工作的最后一个页面…比如page3.jsp loginInterceptor是 public class LoginInterceptor extends AbstractInterceptor { @Override public String intercept(final ActionInvoca
public class LoginInterceptor extends AbstractInterceptor {
@Override
public String intercept(final ActionInvocation invocation) throws Exception {
Map<String, Object> session = ActionContext.getContext().getSession();
String userLoggedin = (String) session.get("userLoggedin ");
Object action = invocation.getAction();
// user is not logged in yet
if(userLoggedin == null){
// public pages that dont require login
if (action instanceof LoginNotRequired) {
return invocation.invoke();
}
// Pages that require the user to be logged in - user not logged in yet
if (!(action instanceof LoginAction)) {
return "loginRedirect";
}
}
// user is logged in
if (userLoggedin.equals("true")) {
return invocation.invoke();
}
return invocation.invoke();
}
公共类LoginInterceptor扩展了AbstractInterceptor{
@凌驾
公共字符串截获(最终ActionInvocation调用)引发异常{
映射会话=ActionContext.getContext().getSession();
字符串userLoggedin=(String)session.get(“userLoggedin”);
Object action=invocation.getAction();
//用户尚未登录
如果(userLoggedin==null){
//不需要登录的公共页面
如果(需要登录的操作实例){
返回invocation.invoke();
}
//需要用户登录的页面-用户尚未登录
如果(!(登录操作的操作实例)){
返回“LoginDirect”;
}
}
//用户已登录
if(userLoggedin.equals(“true”)){
返回invocation.invoke();
}
返回invocation.invoke();
}
}
struts.xml定义
<interceptors>
<interceptor name="login" class="com.mypackage.LoginInterceptor">
</interceptor>
<interceptor-stack name="myStack">
<interceptor-ref name="login"></interceptor-ref>
<interceptor-ref name="defaultStack"></interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"></default-interceptor-ref>
<global-results>
<result name="loginRedirect" type="redirect">/index.jsp</result>
</global-results>
/index.jsp
您需要在整个会话删除过程中保留信息。这意味着应用程序范围中的用户id/名称
=>最后一页
映射、数据库等,以及根据用户上次请求保持此信息最新的拦截器
您还可以将这些信息保存在客户端上,就像保存在cookie中一样
登录只需检查是否存在所述数据,如果发现,则重定向到该数据
这有很多潜在的问题。例如,如果用户的工作流依赖于会话中的特定信息,则该信息现在已消失,需要恢复。您能告诉我此拦截器将如何工作吗??如何获取当前用户页面信息?如何告诉我在5小时后从应用程序范围中删除此userid->lastpage映射??