Spring Boot自定义实现的UserDetails

时间:2019-03-15 15:09:56

标签: spring-boot spring-security spring-session

我正在尝试通过Spring Security设置Spring Boot 2的会话管理,并且我拥有带有实现UserDetails接口的custoom类,正如我从文档中知道的那样,我需要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);

这是我所做的,会话管理不起作用,我能够通过两种不同的浏览器在一台计算机上登录,而且我不知道自己在做什么错,请帮帮我!

1 个答案:

答案 0 :(得分:0)

可能有很多原因,为什么一切都不如预期。

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

  1. 检查您的pom.xml或您对Spring Boot和-Security版本冲突造成的手动版本管理
  2. 在围绕spring-boot-starter-security构建的spring.io上遵循very good example
  3. 在手动添加任何代码之前,请尽量粘在框架上。这尤其适用于实现上述的equalshashCode方法。