我正在探索基于我 glassfish 服务器的 jdbc 领域进行编程安全的纯 Java EE 方法,尤其是登录用户。
所以基本上,在我的登录 servlet 中,我正在做
String username = request.getParameter("username");
String password = request.getParameter("password");
try {
request.login(username, password);
....
在我的 web.xml 中不做任何事情,使用默认领域(文件)。我不希望那样,我想使用我的 jdbcRealm,名为 jdbcsecurerealm。
所以我将以下内容添加到我的 web.xml
<login-config>
<auth-method>FORM</auth-method>
<realm-name>jdbcsecurerealm</realm-name>
</login-config>
请注意,我没有添加任何 form-login-config 来定义 form-login-page 和 form-error-page。
然后,如果我定义安全约束,例如
<security-constraint>
<web-resource-collection>
<web-resource-name>Admin Pages</web-resource-name>
<description></description>
<url-pattern>/admin/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>administrator</role-name>
</auth-constraint>
</security-constraint>
嗯......它的工作原理!request.login 检查我的 jdbcRealm,如果我尝试在未登录的情况下访问安全页面,那么我会得到一个不错的 403。
但似乎我混合了声明性安全性和程序性安全性,因为我觉得我不应该在 web.xml 中声明任何内容,而应该使用 request.isUserInRole。
问题:
我是否遇到了 glassfish 特定的行为,或者是否允许在没有 form-login-config 的情况下使用在 web.xml 中定义的 jdbc 领域的编程安全性(request.login)?
更新 我刚刚看到有可能在 glassfish-application.xml 中指定一个领域,为了指定领域,建立一个耳朵而不是战争是一种更好的方法吗?