- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
Spring Security 有一个代表经过身份验证的用户的基类(org.springframework.security.core.userdetails.User
):
Models core user information retrieved by a UserDetailsService.
Developers may use this class directly, subclass it, or write their own UserDetails implementation from scratch.
在互联网上的大多数示例中,例如 here人们通常为持久性创建单独的类,即示例中的 com.mkyong.users.model.User
。这个类没有扩展 spring security 的,所以现在我们有两个用户,一个用于持久化,一个代表系统中经过身份验证的用户,我们所做的一切是:
那么,我的问题是,再拥有一个 User 对象有什么意义呢?扩展 spring security User 并持久化它不是更好吗? hibernate/jpa 注释可能无法实现,因为我们显然不能在 spring 安全代码中放置注释,但是它可以通过映射文件来实现。这里的另一个问题是我们不应该从服务返回 hibernate 实体以避免服务层外的所有 hibernate 相关问题,所以如果我扩展 spring User 并使它成为一个实体,我无论如何都需要某种 POJO 来从 UserDetailsService
返回。这就是我们需要两个用户对象的原因吗?
附言感谢引用文档
最佳答案
主要原因是:
UserDetails
旨在公开有关经过身份验证的用户的特定信息,因为它与 Spring Security 相关。这是一个可以在任何版本中根据该项目的需要进行更改的类。
通过扩展该类并允许您的持久性模型基于它,您现在可以强制您的持久性模型在任何时候被这些更改所挟持。你不可避免地违反了这两个原则。
使用单独的持久性类的好处是,您现在可以自由地将安全属性存储在适合应用程序需求和目标的任何数据模型中。此外,您的数据库架构不再受您无法控制的外部更改的约束。
这正是 Spring Security 公开 UserDetailsService
的原因。该服务接口(interface)旨在允许 Spring Security 调用特定的存储库实现并将您的持久性模型转换为框架所需的必要 UserDetails
实现,而不会违反上述两个原则。
关于java - 坚持 org.springframework.security.core.userdetails.User 或 UserDetails,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42314725/
刚开始处理Maven和Spring。当我尝试创建DAO和ResultSet然后运行应用程序时,抛出errors: Error:(4, 31) java: package org.springframe
问题: Error:(15, 10) java: cannot find symbol symbol: class SpringRunner Error:(16, 2) java: cannot
我正在尝试构建这个 RESTful 服务示例:https://spring.io/guides/gs/rest-service/GreetingController.java 的导入没有错误: pac
如果我尝试向构造函数注入(inject) Facebook 参数,我将尝试使用 facebook api 使用 spring + thymeleaf + hibernate 创建 Facebook 应
如何解决Spring中Bean的自动连接歧义?我们有一个 Dessert 接口(interface),并且有实现该接口(interface)(Dessert)的三种不同的甜点(Bean)。 今天的甜点
请问为什么我的 pom.xml 文件中会出现此错误 Missing artifact org.springframework:spring-context:jar:${org.springframew
让 gradle 构建正常工作( from a previous question related to this one ),安迪·威尔金森(Andy Wilkinson)为我回答,没有问题。正在为
我正在 tomcat 7 中开发网站(spring 3.1.1),但出现错误 ERROR: org.springframework.web.context.ContextLoader - Contex
我在将航类信息保存到 mysql 数据库时遇到错误。请帮助我下面是我的代码: 我已经尝试了所有方法,添加模式和这么多 它不会从字符串转换为日期 控制台日志 2020-05-12 13:19:21.04
我使用intellij创建了一个小型java应用程序,后来我使用“添加框架支持”选项将该项目更新为Maven项目。当我厌倦了在项目上添加 spring jar 文件时,出现以下错误:“没有为 org.
我尝试使用 org.springframework.data.mongodb.core.MongoOperations 从 mongo 集合中查询记录。我在 CompanyTemplRepoImpl
我尝试将 Spring4 与 Hibernate5 一起使用,但出现此错误: org.springframework.orm.jpa.EntityManagerHolder cannot be cas
我是这个论坛的新手。我正在尝试使用 spring 3.2.6 和 tomcat 7.0 制作一个应用程序。我已将所有必需的 jar 添加到 WEB-INF/lib 文件夹中。 DispatcherSe
我在 maven 架构中使用 Spring 框架 4.0.1.RELEASE、OAuth Security 2.0.7.RELEASE,当我编译代码时,出现以下错误。 SEVERE: Exceptio
我正在使用以下指令开发 CRUD Web 应用程序: https://www.javaguides.net/2019/02/spring-boot-2-angular-7-crud-example-t
这个问题已经有答案了: what is the difference in org.springframework.web.servlet.ModelAndView vs org.springfram
我正在尝试将 hibernate 与 spring boot 一起使用。但我收到此错误:org.springframework.orm.jpa.EntityManagerHolder 无法转换为 or
我尝试创建简单的用户登录和注册页面。但我无法使用服务方法创建用户。我有创建新用户的服务。 @Service public class LocalUserDetailsService implement
我用 STS、Roo 和 GWT 创建了一个新项目,并尝试包含 Spring Security。 从那时起,我收到以下错误。有没有人知道出了什么问题?! org.springframework.bea
这些是我正在使用的版本和依赖项 我怀疑版本需要更改但更改为什么,我不确定 springCore : '5.3.3', springjdbc
我是一名优秀的程序员,十分优秀!