实现自定义Spring Security身份验证方法

时间:2014-10-09 18:32:37

标签: java spring spring-mvc spring-security spring-boot

我正在使用用户登录机制构建spring MVC Web应用程序。我使用spring-boot来设置我的应用程序。要使用数据库对用户进行身份验证,我遵循了以下教程:

http://justinrodenbostel.com/2014/05/30/part-5-integrating-spring-security-with-spring-boot-web/

这里使用了spring的内置认证程序。通过指定

auth.jdbcAuthentication().dataSource(datasource);

Spring安全性检查用户和权限表并对用户进行身份验证。

我想覆盖此默认行为,因为我没有(不需要)身份验证表。另外,我的用户表比标准的三列有更多的列,即用户名,密码和启用。

如何覆盖默认实现?

此外,在用户登录后,如何获取有关用户的信息?

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用自定义AuthenticationProvider实施创建自定义DaoAuthenticationProvider或使用UserDetailsService

以下是第二个解决方案的Spring Java配置类示例:

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Autowired
    private UserService userService;

    // ...

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.authenticationProvider(authenticationProvider());
    }

    @Bean
    public AuthenticationProvider authenticationProvider() {
        DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
        authenticationProvider.setPasswordEncoder(new ShaPasswordEncoder());
        authenticationProvider.setUserDetailsService(userService);
        return authenticationProvider;
    }

}

UserDetailsService接口的实现将包含特定于项目域的逻辑,用于通过用户名检索用户。

如果您需要更详细的示例,请在下面留下评论,我会更新答案,但这应该会为您提供一般性的想法。

我还建议阅读上述Spring类和接口的JavaDocs。