Spring安全打开弹出窗口

时间:2014-09-01 13:41:23

标签: java spring spring-mvc authentication spring-security

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

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

如果身份验证成功,则弹出重定向到“立即购买”页面,或者在打开弹出窗口的情况下停留在该页面中(错误消息“登录错误”)。

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

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

由于

8 个答案:

答案 0 :(得分:4)

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

  1. 在Link / Button-Click-Event
  2. 上放置一个Eventlistener
  3. 使用Javascript并通过XMLHttpRequest
  4. 调用表单操作或链接
  5. 检查HTTP状态代码:xhr.status
  6. if(OK)将当前网址替换为目标网址(via Html5 History API)并将整个文档替换为xhr.responseTextWhat other options for replacing entire HTML document via W3C DOM
  7. else if(Redirect)只需按照重定向
  8. 其他如果(未经授权)打开弹出窗口

答案 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

Spring security Ajax login

答案 7 :(得分:-1)

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