【问题标题】:Spring Boot custom implementation of UserDetailsSpring Boot 自定义实现 UserDetails
【发布时间】:2019-08-06 17:00:35
【问题描述】:

我正在尝试使用 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-boot authentication spring-security spring-session


【解决方案1】:

可能有很多原因,为什么没有按预期工作。

也许你可以通过以下方式进一步挖掘:

  1. 检查您的 pom.xml 或手动版本管理是否存在 Spring Boot 和 -Security 版本冲突
  2. 关注 spring.io 上的 very good example,它是围绕 spring-boot-starter-security 构建的
  3. 在手动添加任何代码之前,尽可能坚持框架。这尤其适用于实现您上面提到的equalshashCode 方法。

【讨论】:

    猜你喜欢
    • 2015-05-14
    • 2019-08-22
    • 1970-01-01
    • 2014-11-21
    • 2020-03-11
    • 2012-01-29
    • 2019-04-07
    • 2016-12-22
    • 1970-01-01
    相关资源
    最近更新 更多