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

标签 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 安全性检查用户和权限表并对用户进行身份验证。

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

如何覆盖默认实现?

另外,用户登录后,如何获取用户的信息?

谢谢!

最佳答案

您可以创建自定义 AuthenticationProvider 或将 DaoAuthenticationProvider 与自定义 UserDetailsS​​ervice 实现结合使用。

下面是第二种解决方案的 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;
    }

}

您的 UserDetailsS​​ervice 接口(interface)的实现将包含特定于您的项目域的逻辑,用于通过用户名检索用户。

如果您需要更详细的示例,请在下面发表评论,我将更新答案,但这应该为您提供总体思路。

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

关于java - 实现自定义 Spring Security 身份验证方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26285609/

相关文章:

java - 三个 float 的概率

java - 如何使用 Spring Data 删除 MongoDB 中的记录

java - @ReplaceWithMock 不使用 Springmockito 注释进行模拟

java - Android在fragment中刷新listview

java - jlink 打包当前平台的二进制文件

java - 如何实现recyclerview的水平自动滚动

Spring 3.2 日期时间格式

java - 将一个 FTL 文件导入到另一个 FTL 文件中

Spring 3 MVC - 调用 Controller 但未找到 View

java - 使用 Spring Security 定义 HTTP 路由以仅服务于 "internal"请求