【问题标题】:Make the user enter the credentials for specific pages让用户输入特定页面的凭据
【发布时间】:2020-02-26 03:11:50
【问题描述】:

在我的 Grails 3.3.10 应用程序中,我正在使用 Spring security plugin ,对于获取关键信息的特定页面,我需要用户再次输入凭据,尽管此用户之前在进入应用程序时登录,任何想法都可以实现这个。

【问题讨论】:

    标签: authentication grails spring-security


    【解决方案1】:

    您可以在您的application.groovy 中进行配置。例如

    grails.plugin.springsecurity.controllerAnnotations.staticRules = [
        [pattern: '/',               access: ['permitAll']],
        [pattern: '/sensitivepage/**',       access: ['ROLE_USER', 'isFullyAuthenticated()']]
    ]
    

    /sensitivepage/ 下的任何内容都需要重新验证。

    Spring Security Documentation中有解释。

    【讨论】:

    • 用户在登录应用程序时已经通过身份验证,现在我需要用户再次登录才能查看或更改敏感数据,例如 Google,您已经在 Gmail 中,但是当您尝试更改密码例如它要求您再次输入密码。这就是我想要实现的目标
    • SShehab,有些网站会给您一种正在发生的印象,因为您已经登录了很长时间,并且在记住我的 cookie 的帮助下运行,该 cookie 使您保持身份验证但未在春季安全规则。除此之外,如果您想强制用户始终登录,而不管只是弹出一个模式并提示用户输入字段并使用 springSecurityService 在后端进行验证。
    【解决方案2】:

    您可以尝试为确实需要重新登录并注册自定义过滤器的端点创建过滤器链。在该过滤器中,您可以撤销现有令牌。使这些端点安全,以便如果请求没有令牌,那么它会将用户重定向到登录页面。

    这是一个示例代码供您参考:(请注意,我没有尝试过这种情况,只是我在这里分享的一个想法。)

    <bean id="reauthenticateFilterChain" class="org.springframework.security.web.DefaultSecurityFilterChain">
        <constructor-arg index="0" ref="reauthenticateResourceRequestMatcher"/>
        <constructor-arg index="1">
            <list>
                <ref bean="reauthenticateFilter"/>
            </list>
        </constructor-arg>
    </bean>
    

    这是注册自定义过滤器链的方法。

    <bean id="springSecurityFilterChain" class="org.springframework.security.web.FilterChainProxy">
        <constructor-arg>
            <list>
                <ref bean="reauthenticateFilterChain"/>
            </list>
        </constructor-arg>
    </bean>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-24
      相关资源
      最近更新 更多