Spring安全打开弹出窗口
当用户执行需要进行身份validation但未执行身份validation的操作时,有人知道如何打开弹出窗口进行身份validation(使用spring security)。
例如:假设页面有一个“立即购买”按钮,将产品添加到购物车并执行结帐(立即购买页面),如果用户已经过身份validation,或者打开弹出窗口供用户执行身份validation。
如果validation成功,则弹簧重定向到“立即购买”页面,或者在打开弹出窗口时停留在该页面中(错误消息“错误登录”)。
我已经在谷歌搜索了一种解决方案,但没有运气。
有人可以指出我正确的方向吗?
谢谢
只是一个想法,没有时间来测试它。 它只是客户端。
- 在Link / Button-Click-Event上放置一个Eventlistener
- 使用Javascript并通过
XMLHttpRequest
调用表单操作或链接 - 检查HTTP状态代码:
xhr.status
- if(OK)将当前url替换为目标url( 通过Html5 History API )并用
xhr.responseText
替换整个文档(通过W3C DOM替换整个HTML文档还有哪些其他选项 ) - 如果(重定向)只是按照重定向
- 否则如果(未经授权)打开弹出窗口
将任务分解为组件。
创建一个根据您的标准激活的灯箱。
通过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模型,它当然可以实现,但你的生活会更加困难….
- Java SSO:针对Active Directory的Kerberos身份validation
- JAX-WS,身份validation和授权 – 如何?
- 使用RestTemplate进行Spring安全身份validation
- Spring安全切换到Ldap身份validation和数据库权限
- JAX WS客户端无法进行身份validation
- 泽西岛 – 要求进行身份validation
- Spring需要一个’AuthenticationManager’类型的bean
- 如何使用DaoAuthenticationProvider以编程方式使用Spring Security对用户进行身份validation
- 使用Primefaces进行j_security_check