我正在构建一个带有用户登录机制的 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 安全性检查用户和权限表并对用户进行身份验证。
我想覆盖此默认行为,因为我没有(不需要)身份验证表。另外,我的用户表的列比标准的三列多得多,即用户名、密码和启用。
如何覆盖默认实现?
另外,用户登录后,如何获取用户的信息?
谢谢!
最佳答案
您可以创建自定义 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
接口(interface)的实现将包含特定于您的项目域的逻辑,用于通过用户名检索用户。
如果您需要更详细的示例,请在下面发表评论,我将更新答案,但这应该为您提供总体思路。
我还建议阅读上述 Spring 类和接口(interface)的 JavaDocs。
关于java - 实现自定义 Spring Security 身份验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285609/