【发布时间】:2015-06-09 10:53:44
【问题描述】:
如果可能的话,我正在考虑使用没有任何框架(例如 Spring)的 Java EE 来执行用户身份验证。我在我的项目中使用 PG、JPA、JSF、Java EE、Glassfish 和 EJB。
在 Glassfish 中 web.xml 会为我做这件事。问题是,我发现使用 3 个表 - USER、USER_IN_GROUP 和 GROUP 有很多可能性,而没有使用 枚举角色和只有 1 个表 - USER(角色作为列),这应该更容易和更轻松。
角色枚举喜欢:
public enum Role {
User, Admin;
}
用户实体喜欢:
public class User implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String nick;
private String pass;
@Enumerated(EnumType.STRING)
private Role roles;
//Getters and Setters
}
在 web.xml 我使用 Basic 方法来测试凭据。
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>issuetrack-realm</realm-name>
</login-config>
<security-role>
<description/>
<role-name>User</role-name>
</security-role>
<security-role>
<description/>
<role-name>Admin</role-name>
</security-role>
使用 JDBCRealm 的领域如下所示: Realm in Glassfish
我尝试登录后显示:警告:WEB9102:Web 登录失败:com.sun.enterprise.security.auth.login.common.LoginException:登录失败:安全异常。
有什么建议吗?
登录失败:安全异常只是领域设置的问题。我没有在 db 中保护我的密码,我将摘要算法留空 = SHA-256。
真正的问题在于那里的角色。我无法使用此设置进入我的应用程序,因为有一个昵称主体而不是组名称(来自 db 的 REALM 设置)。
【问题讨论】:
-
你的问题似乎与这个重复:stackoverflow.com/questions/7941713/…
-
不不,我看到了这个,如果是一样的我就不会写了。我的问题是领域,那个问题的密码有问题。
-
您的想法的问题在于,用户和角色/组之间存在固有的多对多关系,无法使用单个表轻松建模。您的模型将每个用户限制为一个角色。您可以这样做,但您必须实现和安装自己的登录模块,而不是使用服务器内置的登录模块。
-
@SteveC 我想必须有一些简单的解决方案。我知道业务逻辑通常不是由一个角色完成的,但它是最简单的解决方案,因此我会理解它,因为至少应该有同样简单的解决方案。
标签: jakarta-ee jpa enums glassfish