首页 > 解决方案 > 使用 Spring loginUrlAuthenticationEntryPoint 对服务进行 ajax 调用

问题描述

我有一个带有 spring boot 的 web 应用程序,它使用 loginUrlAuthenticationEntryPoint 和它旁边的 restful 服务。该应用程序服务于一个使用 thymeleaf 的网页,它使用会话进行身份验证和一个使用基本身份验证的移动应用程序。所以有一个购物车项目屏幕( html table )在餐厅页面中,我想通过异步单击它们(从数据库)来删除这些项目。但是该页面的安全性(页面 url)由 login-url-auth-entry-point 处理,而不是 rest auth security配置。
因此,当我进行 ajax 调用以删除购物车项目 url 时,它返回 302。我的 ajax 调用不进行身份验证并尝试将我重定向到登录页面。我尝试了很多东西。
我尝试在 ajax 调用中使用 xhrFields{withCredentials:true} - 没有用。
我尝试使用 document.cookie 设置授权字段 - document.cookie 返回空。
我正在尝试发送请求的控制器:

    @ResponseBody
    @PreAuthorize("hasRole('RESTAURANT') OR hasRole('ADMIN')")
    @GetMapping("/flushitem/{id}")
    public ResponseEntity<String> freeCartItem(@PathVariable("id") Long id) {
        try {
            cartService.deleteCart(id);
        }catch(Exception e) {
            e.printStackTrace();
        }
        return new ResponseEntity<>(HttpStatus.OK);
    }

我还尝试删除 @ResponseBody 注释并使用带有 html 链接标签的 thymeleaf 的 th:href 发出请求。即使我的控制器返回 void,它也会尝试重定向到某个地方。
长话短说,我的问题是,我应该如何在通过会话进行身份验证的网页中进行 ajax 调用?或者我可以在不使用 ajax 和 rest 控制器功能的情况下制作我想要的功能吗?

我没有尝试进行任何与 cors 相关的操作。(我猜)

标签: ajaxspringspring-bootauthenticationhttp-headers

解决方案


推荐阅读