在Struts2中實現登陸後跳轉到登入前頁面

來源:互聯網
上載者:User

標籤:des   style   blog   http   color   io   使用   java   資料   

很常見的一個應用就是訪問某個頁面,因為許可權不夠,進入登陸頁面。人性化的設計是能夠在登陸之後,系統跳轉到使用者原本需要訪問的頁面。這可以藉助攔截器來實現。

在我們驗證使用者登陸的攔截器裡面擷取請求地址,並存入session。

 1 package com.tuanplus.interceptor; 2   3 import java.util.Map; 4 import javax.servlet.http.HttpServletRequest; 5 import org.apache.struts2.ServletActionContext; 6 import com.opensymphony.xwork2.ActionContext; 7 import com.opensymphony.xwork2.ActionInvocation; 8 import com.opensymphony.xwork2.interceptor.Interceptor; 9  10 /**11  * 驗證使用者登陸12  * 13  * @author MZULE14  * 15  */16 public class UserLoginInterceptor implements Interceptor {17  18     private static final long serialVersionUID = 1593745236481514166L;19  20     public void destroy() {21     }22  23     public void init() {24     }25  26     public String intercept(ActionInvocation invocation) throws Exception {27         ActionContext context = invocation.getInvocationContext();28         // 擷取session29         Map<String, Object> session = context.getSession();30         Object user = session.get("user");31         // 使用者還未登陸32         if (user == null) {33             // 擷取HttpServletRequest對象34             HttpServletRequest req = ServletActionContext.getRequest();35             // 擷取此請求的地址,請求地址包含application name,進行subString操作,去除application name36             String path = req.getRequestURI().substring(10);37             // 獲得請求中的參數38             String queryString = req.getQueryString();39             // 預防null 指標40             if (queryString == null) {41                 queryString = "";42             }43             // 拼湊得到登陸之前的地址44             String realPath = path + "?" + queryString;45             // 存入session,方便調用46             session.put("prePage", realPath);47             return "login";48         }49         // 使用者已經登陸,允許存取50         return invocation.invoke();51     }52  53 }

在使用者登陸的action中加入字串類型的prePage屬性,用來儲存攔截器放入session的prePage值(即登陸前的請求地址)。

 1 package com.tuanplus.action; 2   3 import com.tuanplus.po.User; 4 import com.tuanplus.service.IUserService; 5 import com.tuanplus.util.AuthCodeUtil; 6   7 /** 8  * 登陸Action 9  * 10  * @author MZULE11  * 12  */13 public class LoginAction extends BaseAction {14  15     private static final long serialVersionUID = -6179170126070438432L;16     private IUserService userService;17     private User user;18     //驗證碼19     private String auth;20     //登入前頁面21     private String prePage;22  23     public String execute() {24         // 擷取登陸的User對象25         User seuser = userService.get(user.getEmail());26         // 加入session27         session.put("user", seuser);28         //擷取跳轉到登陸介面之前的頁面地址,由攔截器提供29         prePage = (String) session.get("prePage");30         //清除session中的資料31         session.remove("prePage");32         if (prePage == null) {33             //不是攔截器跳轉到登陸頁面的,直接存取的登陸頁面34             return "myorder";35         } else {36             return SUCCESS;37         }38     }39     ...40 }

在struts.xml中配置使用action的屬性prePage決定物理視圖資源。

1 ...2 <!-- 登陸 -->3 <action name="login" class="loginAction">4     <result type="redirectAction">${prePage}</result>5     <result name="myorder" type="redirectAction">myOrder</result>6     <result name="input">/login.jsp</result>7 </action>8 ...

 

在Struts2中實現登陸後跳轉到登入前頁面

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.