gpt4 book ai didi

java - 如何调用Spring Security Provider?

转载 作者:行者123 更新时间:2023-12-02 15:42:30 24 4
gpt4 key购买 nike

我有一个要从Grails 2.3.11迁移到Grails 3.3.9的Web应用程序。该应用程序的当前版本使用Spring Security LDAP进行身份验证(用户尝试访问站点并输入用户名和密码时会看到登录表单)。该应用程序的较新版本将使用Spring Security SAML插件进行身份验证(通常称为“单点登录”)。

我有单点登录(SSO),但是只有用户在我们办公室(具有特定IP地址)时,才能访问SSO登录页面。如果用户不在我们办公室(IP地址不在我们的网络中)。我希望用户可以选择使用Spring Security LDAP登录表单登录。

我有点迷失了如何做。从我收集的信息中,我需要在application.groovy中定义我的安全提供程序(我使用了默认的Spring Security提供程序,因为它们似乎可以单独完成工作)。我不明白的是如何告诉Grails每个用户要使用两种登录方法中的哪一种。在我的实例中,它将检查用户的IP地址(我已经有代码了),但是例如,我怎么说:

if(ipAddress matches internalIPRange) use samlAuthenticationProvider
else{use ldapAuthProvider}

这是在 application.groovy中设置的提供者
grails.plugin.springsecurity.providerNames = ['samlAuthenticationProvider', 'ldapAuthProvider', 'daoAuthenticationProvider', 'anonymousAuthenticationProvider']

另外,我也不知道如何手动调用提供程序(如果我猜的话,类似于 provider.invoke())。

最佳答案

它似乎很容易实现。

您可以像这样扩展ExceptionTranslationFilter:

class IpAwareExceptionTranslationFilter extends ExceptionTranslationFilter {

AuthenticationEntryPoint ldapAuthenticationEntryPoint

@Override
void sendStartAuthentication(HttpServletRequest request,
HttpServletResponse response, FilterChain chain,
AuthenticationException reason) throws ServletException, IOException {
SecurityContextHolder.context.authentication = null
requestCache.saveRequest request, response
logger.debug 'Calling Authentication entry point.'
if( isAllowedIpAddress( request ) )
authenticationEntryPoint.commence request, response, reason // default SAML
else
ldapAuthenticationEntryPoint.commence request, response, reason // LDAP
}
}

然后,您将过滤器声明为 bean中的 resources.groovy:
beans = {

exceptionTranslationFilter( IpAwareExceptionTranslationFilter ){
authenticationEntryPoint = new LoginUrlAuthenticationEntryPoint( '/saml/login' )
ldapAuthenticationEntryPoint = new LoginUrlAuthenticationEntryPoint( '/ldap/login' )
}

}

并且它应该替换过滤器链中的默认 exceptionTranslationFilter

关于java - 如何调用Spring Security Provider?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55573409/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com