我正在使用用户登录机制构建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安全性检查用户和权限表并对用户进行身份验证。
我想覆盖此默认行为,因为我没有(不需要)身份验证表。另外,我的用户表比标准的三列有更多的列,即用户名,密码和启用。
如何覆盖默认实现?
此外,在用户登录后,如何获取有关用户的信息?
谢谢!
答案 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。