簡體   English   中英

如何讓已配置的會話在AJAX中工作

[英]How to let my configured session work in AJAX

我在配置會話時具有此攔截器功能。

if (request.getRequestURL().indexOf("profile") > 0) {
    if (session.getAttribute("access").equals("sub-admin")) {
        System.out.println("This is request to profile - admin");
    } else {
        System.out.println("This is request to profile - user");
        response.sendRedirect(request.getContextPath() + "/error"); //ERROR HERE YOU ARE JUST A USER NOT AN ADMIN, I WILL REDIRECT YOU TO ERROR PAGE
    }
}

現在,我在前端使用jQuery和AJAX。

如果我只是一個用戶,並且我將訪問localhost:8080/sample/profile ,它將起作用。 它將我重定向到錯誤頁面。

但是,當我在主頁的菜單中訪問它並單擊配置文件時,它不起作用。

我認為這是因為我正在使用AJAX,並且路徑不會改變,僅視圖是不變的。

$.ajax({
    url: ROOT_URL + '/sample/profile',
    type: "get",
    dataType: "text"
}).done(function(data) {
    $('#idcontainer').html(data);
});

您如何讓會話在我的AJAX前端工作?

如果您想處理來自AJAX調用的重定向,則可以查看以下問題:

更好的解決方案可能是檢查請求是否為AJAX,然后發送可在前端處理的HTTP狀態的JSON響應:

JSON響應:

{
    "error": "Unauthorized",
    "message": "You must be logged in to view this content",
    "code": 401
}

在攔截器中:

boolean ajax = "XMLHttpRequest".equals(request.getHeader("X-Requested-With"));
if (ajax) {
    response.setStatus(HttpServletResponse.SC_UNAUTHORIZED);
    response.getWriter().write(responseToClient);
    response.getWriter().flush();
    response.getWriter().close();
} else {
    response.sendRedirect(request.getContextPath() + "/error");
}

請注意,並非所有AJAX庫都包含X-Requested-With標頭,但是jQuery和大多數其他現代庫都包含。

然后在您的JavaScript函數中:

$.ajax({
    url: ROOT_URL + '/sample/profile',
    type: "get",
    dataType: "text"
}).done(function(data) {
    // handle success HTML
}).fail(function (data) {
    // parse JSON and alert error message
});

另外,似乎您正在使用AJAX請求將頁面內容替換為AJAX請求返回的HTML。 除了使用JSON響應之外,您還可以返回錯誤HTML,並以與返回配置文件HTML內容相同的方式顯示該錯誤:

HTML響應:

<h1>Error</h1>

<p class="error">You must be logged in to view this content.</p>

並以與done回調相同的方式設置HTML:

.fail(function (data) {
    $('#idcontainer').html(data);
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM