首页 > 解决方案 > Spring Boot 自定义实现 UserDetails

问题描述

我正在尝试使用 Spring Security 为 Spring Boot 2 设置会话管理,并且我有实现 UserDetails 接口的自定义类,正如我从文档中知道的那样,我需要 ovveride 方法:equals 和 hashcode

public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    SimpleUser that = (SimpleUser) o;
    return email.equals(that.email) &&
            getPassword().equals(that.getPassword());
}
public int hashCode() {
    return Objects.hash(email, getPassword());
}

安全设定:

http.anyRequest().authenticated()
            .and()
            .addFilterAt(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
            .formLogin()
            .loginPage("/login")
            .and()
            .logout().invalidateHttpSession(true)
            .logoutUrl("/logout").permitAll()
            .logoutSuccessHandler(logoutSuccessHandler())
            .and()
                .csrf().disable()
                .sessionManagement()
                    .maximumSessions(1)
                    .maxSessionsPreventsLogin(true);

这就是我所做的并且会话管理不起作用,我可以从两个不同的浏览器在一台计算机上登录,我不知道我做错了什么,请帮助我!

标签: spring-bootauthenticationspring-securityspring-session

解决方案


可能有很多原因,为什么任何事情都没有按预期工作。

也许您可以通过以下方式进一步深入研究:

  1. 检查您pom.xml或您的手动版本管理是否存在 Spring Boot 和 -Security 版本冲突
  2. 遵循spring.io 上非常好的示例,该示例围绕spring-boot-starter-security
  3. 在手动添加任何代码之前,尽可能长时间地坚持框架。这尤其适用于实现您上面提到的方法equals和方法。hashCode

推荐阅读