当前位置: 首页 > 面试题库 >

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

鲁弘厚
2023-03-14
问题内容

我正在探索基于我的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中指定领域,这是更好的方法来建立耳朵而不是战争来指定领域吗?


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我一直在忙于在GlassFish 3.1上设置身份验证,尤其是JDBC领域。我一直在假设以下条件下进行操作: “用户”表包含登录名(“电子邮件地址”)和密码(“密码”) “组”表包含组名称(“名称”)的列表 “ User_Group”表匹配用户和组。 但是,我无法在任何地方配置“ User_Group”表,因此我想知道服务器如何将用户按组进行匹配。不用说它没有用。但仔细检查后发现: “

  • [2014-07-01T10:21:44.679+0300][glassfish 4.0][SEVERE][][org.glassfish.adminGui][TID:_ThreadId=37_ThreadName=Admin-Listener(4)][TimeMillis:1404199304679][LevelValue:1000][[RestResponse.GetResponse()给出失

  • 问题内容: 我是JDBC的新手,新项目要求我使用JDBC。我想知道的是 JDBC安全吗? 如何防止类似“ Mysql Injection”的问题? 使用JDBC时需要注意哪些安全问题? 以及如何确保优化安全性,以防止黑客入侵数据库? 编辑: 我尝试过google,如果我使用google: “ php mysql安全问题” =>它给出了很多结果 如果我谷歌: “ jdbc mysql安全问题” =>

  • 问题内容: 标准的MySQL JDBC驱动程序是线程安全的吗?具体来说,我想在所有线程中使用单个连接,但是每个语句将仅在单个线程中使用。是否存在某些安全场景,而有些则不安全?您在这里有什么经验? 问题答案: 每个连接开始/提交事务。除非您正在做一些非常具体的事情(我真的想不出一个可以说实话的例子),否则最好使用连接池和每个线程的连接。

  • 我正在尝试让JDBC身份验证与我的小辅助项目一起工作,从表面上看,它应该可以工作,但它没有。所有的配置都遵循贝娄。 如果我切换到具有相同用户名/密码的inMemory身份验证,它就会非常工作。 这是我记录输出时得到的结果:

  • 1.1 定义 线程安全:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协调,这个类都能表现出正确的行为,那么就称这个类是线程安全的。 线程不安全:如果一个类对象同时可以被多个线程访问,如果不做同步处理,可能表现出线程不安全现象(抛出异常、逻辑错误)。 1.2 原子性 1.2.1 定义提供了互斥访问,同一时刻(时间段)只能有一