【问题标题】:How to let my configured session work in AJAX如何让我配置的会话在 AJAX 中工作
【发布时间】:2016-09-03 05:06:21
【问题描述】:

我有这个拦截器函数来配置我的会话。

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 前端工作?

【问题讨论】:

    标签: java jquery ajax session


    【解决方案1】:

    如果您想处理来自 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);
    });
    

    【讨论】:

    • 这只是一个错误,我只是编辑了它。你还有其他处理重定向的例子吗?
    猜你喜欢
    • 2018-12-30
    • 2018-01-23
    • 1970-01-01
    • 2020-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多