国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > AJAX > 正文

Ajax登陸使用Spring Security緩存跳轉到登陸前的鏈接

2024-09-01 08:26:43
字體:
來源:轉載
供稿:網友

Spring Security緩存的應用之登陸后跳轉到登錄前源地址

什么意思?

    用戶訪問網站,打開了一個鏈接:(origin url)起源鏈接 請求發送給服務器,服務器判斷用戶請求了受保護的資源。 由于用戶沒有登錄,服務器重定向到登錄頁面:/login 填寫表單,點擊登錄 瀏覽器將用戶名密碼以表單形式發送給服務器 服務器驗證用戶名密碼。成功,進入到下一步。否則要求用戶重新認證(第三步) 服務器對用戶擁有的權限(角色)判定。有權限,重定向到origin url; 權限不足,返回狀態碼403( “禁止”)。

從第3步,我們可以知道,用戶的請求被中斷了。

用戶登錄成功后(第7步),會被重定向到origin url,spring security通過使用緩存的請求,使得被中斷的請求能夠繼續執行。

具體請看 探究Spring Security緩存請求

我這里僅講解如何在ajax登陸后跳轉到登錄前的鏈接。

1. 首先,如果想跳轉到登陸之前的鏈接,我們需要拿到緩存:

SavedRequest savedRequest = requestCache.getRequest(request, response);

注意!若用戶是直接訪問沒有權限限制的登陸頁面,是不會有緩存的,也就是說savedRequest = null ,所以在使用緩存之前,我們需要做一個非null判斷,也就是:

if (savedRequest != null) {  // 邏輯代碼 }

2. 取到登錄前訪問的url

String url = savedRequest.getRedirectUrl();

3. 使用hashMap建立一個對象,這是為了后續向瀏覽器返回json數據

Map json = new HashMap<String, Object>();   json.put("code", 0);   json.put("message", "操作成功");   json.put("url", url);

可以看到這個json 對象比較簡單,其中url屬性是為了讓瀏覽器端的js跳轉的

4.設置響應體編碼和格式

response.setContentType(FebsConstant.JSON_UTF8);

5.向瀏覽器進行響應數據,這里的數據是json格式,是使用jackson工具包完成的,Maven地址: JacksonMaven地址

response.getWriter().write(mapper.writeValueAsString(ResponseBo.ok(messsage, url)));

下面是完整的Java代碼:

@Override public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {  // 不管請求哪個頁面,登陸成功后僅打開指定頁面index//  redirectStrategy.sendRedirect(request, response, "/index");  // 獲取緩存  SavedRequest savedRequest = requestCache.getRequest(request, response);  // 設置響應格式和編碼  response.setContentType(FebsConstant.JSON_UTF8);    // 緩存非空判斷  if (savedRequest != null) {   // 跳轉到之前引發跳轉的url   String url = savedRequest.getRedirectUrl();      String messsage = "成功";   // 準備json   Map json = new HashMap<String, Object>();   json.put("code", 0);   json.put("message", "操作成功");   json.put("url", url);   Object jsons = ResponseBo.ok(messsage, url);   response.getWriter().write(mapper.writeValueAsString(ResponseBo.ok(messsage, url)));  } else {   // 這個是沒有緩存,直接跳轉到默認ajax默認的頁面   response.getWriter().write(mapper.writeValueAsString(ResponseBo.ok()));  } }            
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 封开县| 花莲市| 游戏| 宕昌县| 长春市| 民县| 林口县| 元氏县| 江华| 漳平市| 宜宾市| 平阳县| 吴川市| 三原县| 纳雍县| 佛学| 辽阳市| 新建县| 大悟县| 北碚区| 赤水市| 萨嘎县| 大兴区| 延川县| 界首市| 于田县| 清涧县| 昌黎县| 芜湖县| 延庆县| 鸡东县| 汨罗市| 九龙城区| 兴山县| 南城县| 庆元县| 凉城县| 酒泉市| 莆田市| 奎屯市| 海安县|