使用者登入後重新導向到要訪問頁面

來源:互聯網
上載者:User

標籤:基礎   class   pos   非同步請求   儲存   request   with   move   需要   

代碼下載:login_limit

1、需求情境

  1)分享到其它平台連結使用者點擊跳轉相應平台登入頁面,登入後重新導向到分享頁面

  2)使用者停留在某頁面長時間未操作至session到期,重新整理或點擊其他連結重新導向到登入頁面,登入後要求重新導向到要訪問頁面

2、需求分析

  考慮到登入後要重新導向到某個頁面,所以在跳轉登入頁面的時候需要系統儲存當前連結,以便在登入後重新導向。思路已經非常清晰,由於我們使用攔截器進行使用者是否登入判斷,因此只需在攔截器的方法裡對當前連結進行儲存,然後登入重新導向即可。具體代碼如下:

  由於之前已寫過多使用者登入限制,因此我們只需在這篇博文的基礎上稍作修改即可(具體只需修改登入攔截器即可),修改後代碼如下(粗體字代碼為修改代碼)

  註:需要注意的是非同步請求需被過濾(非同步請求不會跳轉頁面,導致登入後頁面直接顯示請求資料)

package com.utils.interceptor;import com.entity.User;import org.springframework.web.servlet.ModelAndView;import org.springframework.web.servlet.handler.HandlerInterceptorAdapter;import java.util.Date;import java.util.Map;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;/** * 登入攔截器 1、未登入跳轉登入頁面 2、掉線儲存當前連結,重新導向到登入頁面 3、使用者被踢掉後給出提示資訊 */public class LoginInterceptor extends HandlerInterceptorAdapter {    @Override    public boolean preHandle(HttpServletRequest request,                             HttpServletResponse response, Object handler) throws Exception {        HttpSession session = request.getSession();        User user = (User) session.getAttribute("now_user");        if (user == null) {            //使用者掉線,儲存當前連結並重新導向到登入頁面            //String s = request.getHeader("x-requested-with");            if (request.getHeader("x-requested-with") == null) {//非ajax(非同步)請求,則儲存當前訪問連結                String queryUrl = request.getQueryString() == null ? "" : ("?" + request.getQueryString());//擷取參數                String requestUrl = request.getServletPath() + queryUrl;//httpRequest.getServletPath(),擷取連結                if (session.getAttribute("redirect_link") == null) {                    session.setAttribute("redirect_link", requestUrl);                }            }            response.sendRedirect(request.getContextPath() + "/other/toLogin");            return false;        }        //多使用者登入限制判斷,並給出提示資訊        boolean isLogin = false;        if (user != null) {            Map<String, String> loginUserMap = (Map<String, String>) session.getServletContext().getAttribute("loginUserMap");            String sessionId = session.getId();            for (String key : loginUserMap.keySet()) {                //使用者已在另一處登入                if (key.equals(user.getUserName()) && !loginUserMap.containsValue(sessionId)) {                    isLogin = true;                    break;                }            }        }        if (isLogin) {            Map<String, String> loginOutTime = (Map<String, String>) session.getServletContext().getAttribute("loginOutTime");            session.setAttribute("mess", "使用者:" + user.getUserName() + ",於 " + loginOutTime.get(user.getUserName()) + " 已在別處登入!");            loginOutTime.remove(user.getUserName());            session.getServletContext().setAttribute("loginUserMap", loginOutTime);            response.sendRedirect(request.getContextPath() + "/other/toLogin");            return false;        }        return super.preHandle(request, response, handler);    }    @Override    public void postHandle(HttpServletRequest request,                           HttpServletResponse response, Object handler,                           ModelAndView modelAndView) throws Exception {        super.postHandle(request, response, handler, modelAndView);    }    @Override    public void afterCompletion(HttpServletRequest request,                                HttpServletResponse response, Object handler, Exception ex)            throws Exception {        super.afterCompletion(request, response, handler, ex);    }}

  到此,使用者登入後重新導向到要訪問頁面的問題完美解決。

使用者登入後重新導向到要訪問頁面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.