Spring安全打开弹出窗口

当用户执行需要进行身份validation但未执行身份validation的操作时,有人知道如何打开弹出窗口进行身份validation(使用spring security)。

例如:假设页面有一个“立即购买”按钮,将产品添加到购物车并执行结帐(立即购买页面),如果用户已经过身份validation,或者打开弹出窗口供用户执行身份validation。

如果validation成功,则弹簧重定向到“立即购买”页面,或者在打开弹出窗口时停留在该页面中(错误消息“错误登录”)。

我已经在谷歌搜索了一种解决方案,但没有运气。

有人可以指出我正确的方向吗?

谢谢

只是一个想法,没有时间来测试它。 它只是客户端。

  1. 在Link / Button-Click-Event上放置一个Eventlistener
  2. 使用Javascript并通过XMLHttpRequest调用表单操作或链接
  3. 检查HTTP状态代码: xhr.status
  4. if(OK)将当前url替换为目标url( 通过Html5 History API )并用xhr.responseText 替换整个文档(通过W3C DOM替换整个HTML文档还有哪些其他选项 )
  5. 如果(重定向)只是按照重定向
  6. 否则如果(未经授权)打开弹出窗口

将任务分解为组件。

创建一个根据您的标准激活的灯箱。

通过ajax提交表单。

您的身份validation控制器需要执行以下操作:

如果成功 – >重定向到结帐页面,如果un-succesfull返回一个片段,告诉它为什么不正确。

如果返回错误,则需要完全刷新表单元素以确保没有csrf攻击。

多数民众赞成在我的方式,我不能给你代码,因为它取决于你如何设置你的项目和查看渲染。

您可以使用http基本身份validation,当您需要进行身份validation时,它至少会打开一个弹出窗口。 http://www.baeldung.com/spring-security-basic-authentication

当用户点击Buynow按钮时,您可以使用ajax调用来检查用户是否已通过身份validation。

如果用户通过身份validation,则将产品购物车表单提交或转发到下一个视图(控制器方法)。

如果未经过身份validation,您可以打开弹出窗口进行登录。

在登录表单中使用ajaxvalidation用户是否成功将购物车表单提交到下一个视图,否则会给出错误消息。

将购物车信息存储在会话中,以便您可以在下一个视图中使用它们。

必须在某些事件上执行Pop框实现(您可以使用任何前端框架)。 鉴于身份validation,“project-security.xml”将为您完成。 您应该只根据您的要求进行配置。

实际上Spring Security支持开箱即用的重定向,看看SavedRequestAwareAuthenticationSuccessHandler ,所以你唯一要做的就是保护url(例如你有类似 (或者如果access = "hasRole('user')无论你做什么)你的购买按钮(请求像"/purchase/"productIdHere"/purchase?productId=someProductId ),然后将用户重定向到登录页面,成功登录后,他应该回到原来的页面。在你的控制器中你可以处理如下的请求:

 @Controller ... @RequestMapping(value = "/purchase..., method = ....) public ModelAndView purchase(@PathVariable("productId") String/Long productId (or @RequestParam etc...) Product someProduct = someService.getByProductId(productId); ModelAndView mav = new ModelAndView("view.name"); mav.setObject("product",product); return mav; 

你必须根据自己的需要匹配其他东西,只需按照你的要求指出正确的方向。

希望能帮助到你。

您可以使用Ajax身份validation使用CSS HTML登录表单(只需在Web上搜索)或使用Spring Http Basic Auth弹出窗口。 每个页面都应该检查用户是否经过身份validation(显示弹出窗口)。

查看这两篇文章,了解如何实现这两种解决方案:

在Java和Spring中为RESTful服务添加Http Basic Auth

Spring安全性Ajax登录

Spring安全性可以在Spring MVC上运行 – 它使用重定向。 因此,想法是当用户尝试访问“安全”内容,并且他尚未经过身份validation时,则返回HTTP 302并重定向到登录页面。 如果你对弹出窗口感兴趣,那么你打破了MVC模型,它当然可以实现,但你的生活会更加困难….