当前位置: 首页 > 知识库问答 >
问题:

Spring Security自定义登录回退

施彬郁
2023-03-14

有人能告诉我一些资源吗?这些资源可以指导我如何实现一个定制的Spring Security身份验证,首先在ldap服务器上测试找到的用户的凭据,如果该用户的ldap用户名字段存在,如果无法进行身份验证(可能是因为ldap用户名不存在,或者给定的密码没有对服务器上的用户名进行身份验证),则会尝试根据本地数据库中散列的用户本地密码进行身份验证。

非常感谢。

共有1个答案

法烨华
2023-03-14

对于这个具体问题,似乎没有太多好的答案。

虽然我还没有给出一个完整的工作LDAP示例,但对于@Marcus在评论中链接的LDAP示例中的这一部分,应该有一个良好的开端。话虽如此,您可以按照所需顺序轻松注册两个身份验证提供程序,默认的DaoAuthenticationProvider是第二个:

@Configuration
public class SecurityConfiguration {

    @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        // @formatter:off
        return http
            .authorizeRequests(authorizeRequests -> authorizeRequests
                .anyRequest().authenticated()
            )
            .formLogin(withDefaults())
            .authenticationProvider(ldapAuthenticationProvider())
            .authenticationProvider(daoAuthenticationProvider())
            .build();
        // @formatter:on
    }

    @Bean
    public AuthenticationProvider ldapAuthenticationProvider() {
        LdapContextSource contextSource = null; // TODO See sample for example
        return new LdapAuthenticationProvider(new BindAuthenticator(contextSource));
    }

    @Bean
    public AuthenticationProvider daoAuthenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setUserDetailsService(userDetailsService());
        return authenticationProvider;
    }

    @Bean
    public UserDetailsService userDetailsService() {
        UserDetails userDetails = User.builder()
            .username("user")
            .password("{noop}password")
            .roles("USER")
            .build();

        return new InMemoryUserDetailsManager(userDetails);
    }

}

显然,您需要提供自己的用户详细信息,这些信息使用数据库而不是内存。username-password示例将让您开始使用它,您可以用spring data@Repository替换该示例中的MapCustomUserRepository

 类似资料:
  • 问题内容: 这是我的情况: 一个Web应用程序对许多应用程序执行某种SSO 登录的用户,而不是单击链接,该应用就会向正确的应用发布包含用户信息(名称,pwd [无用],角色)的帖子 我正在其中一个应用程序上实现SpringSecurity以从其功能中受益(会话中的权限,其类提供的方法等) 因此,我需要开发一个 自定义过滤器 -我猜想-能够从请求中检索用户信息,通过自定义 DetailsUserSe

  • 问题内容: 我在这里问了有关最新的Spring框架和基于代码的配置的问题 initializer MVC config security config security initializer custom login 但是,现在我有关于自定义登录的新问题。 发布到j_spring_security_check时,我会收到http 302。 我正在请求/,但登录后仍保留在登录页面上。 因为我使用的

  • 请参考一些wordpress post登录插件。我有3页的网站主页,关于正常工作和工作安全,我想显示工作安全页面,如果用户登录有电子邮件/只是虚拟id,我可以生成。找不到此登录模块的插件。带有自定义页面的自定义菜单 使用这个脚本,我可以创建菜单,但不能重定向单独的页面 函数my_wp_nav_menu_args($args=''){ 如果(用户是否已登录){ }否则{ } } 添加过滤器(“wp\

  • 我在我的JSF应用程序中使用容器管理的安全性,因此我有一个低于默认设置的登录页面。 现在在登录页面中,我想在登录按钮旁边添加一个按钮,以允许用户注册。 但我该如何将其转发到我的登记簿。我的注册按钮的xhtml页面?我用以下代码进行了尝试: 我也尝试将表单更改为h: form,以便我可以使用p:命令按钮,但正如我注意到的,我的登录页面不工作,当我单击提交按钮时什么也没有发生。 如何实现我想做的事?

  • 这是一个概念问题。 我这样问的原因是,有些其他RESTful服务使用401处理错误的凭据,即使您只是询问凭据是否有效。然而,我对401响应的理解是,它们代表了一个没有有效凭据的资源。但登录资源应该对任何人都可以访问,因为登录资源的全部目的是告诉您凭据是否有效。 换句话说,在我看来,像这样的请求: 如果提供了错误的凭据,则应返回401。而是这样的请求: 关于这件事,我想听听一些合理的意见。处理这件事

  • 而且,再一次,即使键入正确的凭据,正如我在“userDetailsService”方法中指定的那样,我也无法登录,但这次我终于可以在控制台上看到错误消息: 显然我走了,但没有离开这个地方,因为现在我不知道我的代码有什么问题...