首先,Glassfish 不提供更好的默认安全领域,我没有任何世俗的理由。 JDBCRealm 不支持加盐用户密码,也不支持更现代的散列技术如 PBKDF2 等...
话虽如此,我认为如果你想使用默认的 JDBCRealm,这里有一种方法可以强制只有“活跃”用户才能访问某些页面。
有三个类似于下面的表(这些表用于 postgres)。
CREATE TABLE users
(
user_id serial PRIMARY KEY,
email character varying(255) NOT NULL UNIQUE,
passhash character varying(255) NOT NULL
);
CREATE TABLE users_groups
(
users_groups_id serial PRIMARY KEY,
user_email character varying(255) NOT NULL REFERENCES users(email),
group_name character varying(20) NOT NULL REFERENCES groups(group_name)
);
CREATE TABLE groups
(
group_name character varying(20) PRIMARY KEY
);
创建一个“活动”组,而不是 users 表上的 is_active 列。然后,您可以强制该组/角色的成员访问您的 Web 应用程序的某些部分(确保正确设置组和角色之间的映射)。
例如,如果您希望所有 url 只能由“活跃”用户访问,您可以在 web.xml 中添加如下内容:
<security-constraint>
<web-resource-collection>
<web-resource-name>private</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>active</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>
我假设您的密码哈希代码正常工作,并且使用 glassfish 成功设置了 db 表?可以说是脖子疼。
有关使用角色/组的文档:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbxj.html