我很抱歉用这个问题打扰你,但我最终找到了一个令人头疼的人,我想知道我是否以错误的方式处理这个问题。
我想映射一个包含 org.springframework.security.core.authority.SimpleGrantedAuthority
集合的类这样我就不需要将 ORM 急切地加载的它发送到 Spring 安全类中。但它的“role”属性与 getter“getAuthority”相关联,此时 Orika 意味着麻烦。我可以强制 Orika 使用 getter 返回的值,将其放入目标类的 setter 中吗?
如果您足够关心,这里有一些我的问题的背景。
我正在为应用程序使用 Spring security。我有一项服务返回 org.springframework.security.core.userdetails.UserDetails
这样 spring 就可以检查用户是否经过身份验证并且具有权限。我们拥有的 UserDetail 的实现是一个名为 User
的本地实现。 。由于此类实现了 org.springframework.security.core.userdetails.UserDetails
,它有方法 public Collection<? extends GrantedAuthority> getAuthorities();
返回该用户的权限。
一切都很好,除了我们有这个 User
在数据库中,用 hibernate 处理。第一个选择将开放 session 留在视野中的位置。我们不希望这样。第二个选择是获取 ORM、EARGER。我们也不希望这样。因此,我们决定使用 DTO,实现 UserDetail,并将其映射到 orika。就在那时,一切都崩溃了。 org.springframework.security.core.GrantedAuthority
是一个接口(interface)。我们使用的具体类是 org.springframework.security.core.authority.SimpleGrantedAuthority
。这是一个难以映射且致命的类,因为它有一个属性名称“role”,但它的 getter 是“getAuthority”
public String getAuthority() {
return role;
}
看来 Spring 团队和 Orika 团队并不是很亲密的 friend 。否则,他们会根据 java 标准命名该属性,而 Orika 会直接映射它。我也不愿意为这种特殊情况定义自定义映射器,这正是困扰我的问题。除了用特定类的自定义映射器替换所有“魔法”之外,是否有任何已知的方法可以强制 Orika 使用 getter 方法返回的值?
最佳答案
好吧,最终,像我一样固执是值得的:)
我解决了有问题的问题,而无需诉诸任何技巧。干扰我的映射的问题是 getter 返回的集合的泛型。你会发现,orika 似乎无法处理以下映射...至少,我不知道。
public List<? extends GrantedAuthority> getAuthorities() {
return this.role;
}
我把它改成了
public List<GrantedAuthority> getAuthorities() {
return this.role;
}
并且工作得很好!
非常感谢您的时间和关注!
关于java - Orika映射spring的org.springframework.security.core.GrantedAuthority,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20366871/