引导模式作为 Spring Security 的登录页面
Posted
技术标签:
【中文标题】引导模式作为 Spring Security 的登录页面【英文标题】:bootstrap modal as the login page for spring security 【发布时间】:2016-10-11 23:32:29 【问题描述】:在我的网络应用程序中,我有一个登录/注册部分作为引导模式,当单击标题中的登录图标时会出现该模式。我正在尝试在 spring security 中配置它,但我看到我必须在 config 方法中返回一个页面:
@Override
protected void configure(HttpSecurity http) throws Exception
http
.formLogin().loginPage("/login")
.and()
...
我的问题是如何正确地将模式实现为登录页面而不是完整的 html 页面。我正在使用带有 spring security 4 和 thymeleaf 的 spring mvc 4
在我的 html 页面的标题中:
<div class="col-xs-7 col-sm-4">
<div class="top-social-last top-dark pull-right"
data-toggle="tooltip" data-placement="bottom"
title="Login/Register">
<a class="top-icon-circle" href="#login-modal"
data-toggle="modal">
<i class="fa fa-lock"></i>
</a>
</div>
<!-- social icons -->
</div>
这个标题和模态实现作为一个片段共享,包含在所有页面中(模态的代码很长,所以我没有在这里复制它)。
现在有些请求需要登录,所以我必须在安全配置中添加一个登录页面,这些请求应该被重定向到,但是我没有页面,我只有这个作为片段共享的模式在所有页面中。我认为我做的不对,所以如果有人可以告诉我如何在 Spring Security 中使用模态。
例如,在airbnb网站中,如果你想点赞一个广告但没有登录,会弹出一个模态而不是重定向到一个页面。
【问题讨论】:
你能告诉我们你到目前为止做了什么吗?你能发布一些关于你在实现它时遇到的问题的代码 【参考方案1】:您必须在引导程序中创建登录模式,并在有人单击登录按钮时显示它。您的登录模式应在<form>
标签中包含标准登录表单。单击提交按钮后,表单应将用户重定向到
th:action="@/j_spring_security_check"
仅此而已。
【讨论】:
是的,这不是问题.. 但在 Spring Security 中,我想拦截某些需要登录的请求并将用户重定向到此模式.. 但安全配置需要一个页面而不是模式..那我该怎么做(例如,在airbnb网站中,如果您想点赞广告但未登录,则会弹出模式而不是重定向到页面) 如果有人去http://domain.com/need-login-to-view
,你想打开模型吗?而不是重定向到登录页面,是吗?
完全正确.. 只是一个模式而不是一个页面
因此您应该重定向到例如您的主页并传入要显示模式的参数。 loginPage("/?needLogin=1")
,如果有参数needLogin=1
则显示模态@
我可以重定向到当前页面吗?我不希望用户转到另一个页面?在 spring 安全配置中是否有可能?【参考方案2】:
1.您将需要一个自定义实现 spring 安全登录,FilterChainProxy,并且您必须将此模式放在每个页面中,我会将其放在页脚部分或将其放在页眉部分,因为您已经在片段中拥有它。
2.当访问安全 url 时检查主体会话,如果此请求不在会话中,如果是 ajax 请求,您可能会返回错误代码,您需要过滤器并在不是时重定向到页面向身份验证管理器发出 ajax 请求,您可以在其中显示页面加载时的模式。
你需要一个 preauth 过滤器来实现这个。看看下面的链接preauth filter
【讨论】:
以上是关于引导模式作为 Spring Security 的登录页面的主要内容,如果未能解决你的问题,请参考以下文章
spring security+cas(cas proxy配置)
Spring Security 入门(1-13)Spring Security - Session管理
弃用 spring-security-oauth 作为客户端