引导模式作为 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】:

您必须在引导程序中创建登录模式,并在有人单击登录按钮时显示它。您的登录模式应在&lt;form&gt; 标签中包含标准登录表单。单击提交按钮后,表单应将用户重定向到 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 + JPA 用户模式

弃用 spring-security-oauth 作为客户端

Spring Security OAuth 2 与传统 Spring MVC

无法在 Spring Security 中验证 url 模式的角色