2014-10-09 63 views
0

我正在构建一个具有用户登录机制的Spring MVC Web应用程序。我使用了spring-boot来设置我的应用程序。为了验证与数据库中的用户,我也跟着下面的教程:实现自定义Spring安全验证方法

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

在此,使用Spring的内置认证程序。通过指定

auth.jdbcAuthentication().dataSource(datasource); 

Spring安全检查用户和权限表并验证用户。

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

如何覆盖默认实现?

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

谢谢!

+0

有很多这样的例子,搜索UserDetailsS​​ervice。 – holmis83 2014-10-09 18:54:27

+0

看看这个页面,它可以帮助你理解需要做什么,因为它有一个体面的例子http://igorristic.blogspot.com.au/2014/09/spring-mvc-and-security-basic-setup .html – Aeseir 2014-10-10 00:23:19

回答

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。

+0

很好的答案;只有批评者认为不推荐MD5和SHA作为哈希函数,而是使用Blowfish哈希(bCryptPasswordEncoder),因为它可以随着计算能力变得更便宜(因此破解密码变得更容易)而适应。详情:https://codahale.com/how-to-safely-store-a-password/ – 2017-04-06 14:41:44