小编典典

Java EE 6程序安全性,glassfish和JDBC领域

java

我正在探索基于我的glassfish服务器上的jdbc领域的纯Java EE实现程序安全性的方法,尤其是登录用户。

所以基本上,在我的登录servlet中,

String username = request.getParameter("username");
String password = request.getParameter("password");

try {
    request.login(username, password);
....

在我的web.xml中不做任何事情,将使用默认领域(文件)。我不需要,我想使用名为jdbcsecurerealm的jdbcRealm。

所以我将以下内容添加到我的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。

问题

我是在打玻璃鱼的特定行为,还是允许将编程安全性(request.login)与web.xml中定义的jdbc领域一起使用,而无需使用form-login-
config?

更新 我刚刚看到有可能在glassfish-application.xml中指定领域,这是更好的方法来建立耳朵而不是战争来指定领域吗?


阅读 214

收藏
2020-11-23

共1个答案

小编典典

当您使用特定于容器的(专有)登录模块(例如GlassFish JDBC登录模块/领域)时,无法采用可移植(纯Java EE)方式的纯编程方法。

Java EE
6中有一个API用于此目的:JASPIC。使用该API(从技术上讲,是SPI),您可以构建可移植的身份验证模块,并完全以编程方式配置它们,而无需任何声明。

我写了一篇有关此的博客文章,希望为您提供更多详细信息。

2020-11-23