struts2实现登录后跳转回本页面

本文介绍了一种基于Struts2框架的登录拦截器实现方法,通过自定义拦截器来判断用户是否登录,并在未登录的情况下重定向到登录页面。此外,还介绍了如何保存用户原本请求的URL以便登录成功后返回。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载地址:


    import java.util.Map;  
      
    import javax.servlet.http.HttpServletRequest;  
    import javax.servlet.http.HttpSession;  
      
    import org.apache.log4j.Logger;  
    import org.apache.struts2.ServletActionContext;  
      
    import com.aircom.zzy.util.StringUtil;  
    import com.opensymphony.xwork2.ActionInvocation;  
    import com.opensymphony.xwork2.interceptor.AbstractInterceptor;  
    import com.opensymphony.xwork2.interceptor.MethodFilterInterceptor;  
      
    //继承可以指定方法的拦截器接口  
      
    public class LoginInter extends MethodFilterInterceptor {  
      
      private static final long serialVersionUID = -72827036782663208L;  
       
      private static  final Logger log = Logger.getLogger(LoginInter.class);  
       
         public final static String SESSION_KEY="regUserId";  
         public final static String GOTO_URL_KEY="GOING_TO";     
      
         protected String doIntercept(ActionInvocation invocation) throws Exception     
          {      
              HttpServletRequest request=ServletActionContext.getRequest();     
                  
              HttpSession session=request.getSession();     
              //通过session 判断用户是否登录  
              if(session!=null && session.getAttribute(SESSION_KEY)!=null) {     
                      return invocation.invoke();     
               }     
              //这里是关键点了 设置客户原来请求的url地址     
              setToGoingURL(request, session, invocation);   
              return invocation.invoke();     
          }     
      private void setToGoingURL(HttpServletRequest request,HttpSession session,ActionInvocation invocation)     
          {     
              //如果referer不为空 直接使用它。如果为空我们分别获得命名空间,action名,以及请求参数     
              //从新构造成一个URL保存在session中     
              String url=request.getHeader("referer");     
              log.info("待转向URL:"+request.getHeader("referer"));     
              if(url==null || url.equals(""))     
                  {     
                      url="";     
                      String path=request.getContextPath();     
                      String actionName=invocation.getProxy().getActionName();     
                      String nameSpace=invocation.getProxy().getNamespace();     
                      if(StringUtil.validateNull(nameSpace))     
                          {     
                              url = url+path+nameSpace;     
                                   
                          }     
                      if(StringUtil.validateNull(actionName))     
                          {     
                              url = url+"/"+actionName+".action"+"?";     
                          }     
                           
                      Map<String,String[]> zzMap = request.getParameterMap();     
                      if(zzMap!=null)     
                          {     
                              for(String s:zzMap.keySet())     
                                  {     
                                      String[] value=zzMap.get(s);     
                                      for(String val:value)     
                                          {     
                                              url=url+s+"="+val+"&";     
                                          }     
                                           
                                  }     
                          }     
                      log.info("完整URL:"+url);     
                  }     
                     session.setAttribute(GOTO_URL_KEY, url);     
          }  
      
    }  

二、新建统一中间跳转页面login_result.jsp

代码如下:

    <%  
     String going_to = (String)session.getAttribute("GOING_TO");  
       
     if(going_to != null) {  
      response.sendRedirect(going_to);  
      }  
     %>  

三、配置struts.xml文件: 
代码如下:
    <struts>  
     <package name="login" extends="common">  
      <interceptors>  
       <interceptor name="loginInter" class="com.aircom.zzy.interceptor.LoginInter">  
       </interceptor>  
      </interceptors>  
            <action name="login" class="com.aircom.zzy.action.LoginRegistAction" method="login">  
                <result name="error">/webapp/login_result.jsp</result>  
                <result name="input">/webapp/login_result.jsp</result>  
                <result name="success">/webapp/login_result.jsp</result>  
              <interceptor-ref name="defaultStack"/>  
       <interceptor-ref name="loginInter">  
      
        <!--只拦截这个action中的login方法-->  
        <param name="includeMethods">login</param>  
       </interceptor-ref>  
            </action>  
            <action name="logout" class="com.aircom.zzy.action.LoginRegistAction" method="logout">  
                <result name="success">/webapp/login_result.jsp</result>  
              <interceptor-ref name="defaultStack"/>  
       <interceptor-ref name="loginInter">  
        <param name="includeMethods">logout</param>  
       </interceptor-ref>  
            </action>  
            <!-- The following set is the action for register. -->  
            <action name="goRegister" class="com.aircom.zzy.action.LoginRegistAction" method="goRegisterPage">  
                <result name="success">/webapp/register.jsp?num=1</result>  
            </action>  
            <action name="register" class="com.aircom.zzy.action.LoginRegistAction" method="register">  
                <result name="success">/webapp/index.jsp</result>  
                <result name="input">/webapp/register.jsp?num=1</result>  
            </action>  
     </package>  
    </struts>  



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值