spring-boot - 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);
这就是我所做的并且会话管理不起作用,我可以从两个不同的浏览器在一台计算机上登录,我不知道我做错了什么,请帮助我!
解决方案
可能有很多原因,为什么任何事情都没有按预期工作。
也许您可以通过以下方式进一步深入研究:
- 检查您
pom.xml
或您的手动版本管理是否存在 Spring Boot 和 -Security 版本冲突 - 遵循spring.io 上非常好的示例,该示例围绕
spring-boot-starter-security
- 在手动添加任何代码之前,尽可能长时间地坚持框架。这尤其适用于实现您上面提到的方法
equals
和方法。hashCode
推荐阅读
- python - 当我在 python 烧瓶中使用 config.json 文件中的用户名时,我能够创建会话,但是当我从数据库中导入名称时,我没有这样做
- python - Python Tkinter 列表框后退前进按钮
- python-3.x - 基于变量向特定列表添加值的最实用方法
- reactjs - 第三方库作为 React 的真实来源
- r - designmatch 包输出 1:2 匹配
- javascript - 如何修复错误“编译失败:./node_modules/@react-leaflet/core/esm/path.js 10:41 模块解析失败:意外令牌(10:41)”
- php - Firebase-Php-Kreait-4.17-AdminSdk
- excel - VBA - 如果单元格值......然后是多个 THEN 语句
- mysql - SQL 需要从 2 个不同的表中选择拼写不同或不匹配的行
- android - Android 11 ACTION_OPEN_DOCUMENT_TREE:将初始 URI 设置为 Documents 文件夹