当用户执行需要进行身份验证但未执行身份验证的内容时,有人知道如何打开弹出窗口进行身份验证(使用spring security)。
例如:假设页面有一个“立即购买”按钮,将产品添加到购物车并执行结帐(立即购买页面),如果用户已经过身份验证,或者打开弹出窗口供用户执行身份验证。
如果身份验证成功,则弹出重定向到“立即购买”页面,或者在打开弹出窗口的情况下停留在该页面中(错误消息“登录错误”)。
我已经在谷歌搜索了一种解决方案,但没有运气。
有人可以指出我正确的方向吗?
由于
答案 0 :(得分:4)
只是一个想法,没有时间去测试它。它只是客户端。
XMLHttpRequest
xhr.status
xhr.responseText
(What other options for replacing entire HTML document via W3C DOM)答案 1 :(得分:0)
将任务分解为组件。
创建一个根据您的标准激活的灯箱。
通过ajax提交表单。
您的身份验证控制器需要执行以下操作:
如果成功 - >重定向到结帐页面 如果un-succesfull返回一个片段,告诉它为什么不正确。
如果返回错误,则需要完全刷新表单元素以确保没有csrf攻击。
这就是我已经完成了我的工作,不能根据您设置项目和查看渲染的方式为您提供代码。
答案 2 :(得分:0)
您可以使用http基本身份验证,当您需要进行身份验证时,它至少会打开一个弹出窗口。 http://www.baeldung.com/spring-security-basic-authentication
答案 3 :(得分:0)
当用户点击 Buynow 按钮时,您可以使用ajax调用来检查用户是否经过身份验证。
如果用户通过身份验证,请将产品购物车表单提交或转发到下一个视图(控制器方法)。
如果未经过身份验证,您可以打开一个弹出窗口进行登录。
在登录表单中使用ajax验证用户是否成功将购物车表单提交到下一个视图,否则会给出错误消息。
将购物车信息存储在会话中,以便您可以在下一个视图中使用它们。
答案 4 :(得分:0)
必须在某些事件上执行Pop框实现(您可以使用任何前端框架)。鉴于身份验证,“project-security.xml”将为您完成。您应该只根据您的要求进行配置。
答案 5 :(得分:0)
实际上Spring Security支持开箱即用的重定向,看看SavedRequestAwareAuthenticationSuccessHandler,所以你唯一要做的就是保护网址(例如你有类似<intercept-url pattern = "/purchase/*" access = "isAuthenticated()" />
的东西(或者如果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;
您必须根据自己的需要匹配其他内容,只需按照您的要求指出正确的方向。
希望它有所帮助。
答案 6 :(得分:0)
您可以使用Ajax身份验证使用CSS HTML登录表单(只需在Web上搜索)或使用Spring Http Basic Auth弹出窗口。每个页面都应该检查用户是否经过身份验证(显示弹出窗口)。
查看这两篇文章,了解如何实施这两种解决方案:
Adding Http Basic Auth to RESTful Services in Java and Spring
答案 7 :(得分:-1)
Spring安全性可以在Spring MVC上运行 - 它使用重定向。因此,想法是当用户尝试访问“安全”内容并且他尚未经过身份验证时,则返回HTTP 302并重定向到登录页面。如果你对弹出窗口感兴趣,那么就打破了MVC模型,它当然可以实现,但你的生活会更加艰难....