Java EE 6编程安全性,glassfish和JDBC领域
我正在探索基于我的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中
FORM jdbcsecurerealm
请注意,我没有添加任何form-login-config来定义form-login-page和form-error-page。
然后,如果我定义安全约束,如
Admin Pages /admin/* administrator
嗯……它有效! request.login检查我的jdbcRealm,如果我尝试访问安全页面而没有登录,那么我得到一个不错的403。
但似乎我混合了声明性安全性和程序化安全性,因为我觉得我不应该在web.xml中声明任何内容,而是使用request.isUserInRole。
问题 :
我是否遇到了glassfish特定的行为,或者是否允许使用编程安全性(request.login)和web.xml中定义的jdbc域而不使用form-login-config?
更新我刚刚看到有可能在glassfish-application.xml中指定一个领域,为了指定领域,它是建立一个耳朵而不是战争的更好方法吗?
当您使用特定于容器(专有)的登录模块(如GlassFish JDBC登录模块/领域)时,无法以便携式(纯Java EE)方式实现纯编程方法。
Java EE 6中有一个API:JASPIC。 使用该API(技术上为SPI),您可以构建便携式身份validation模块并完全以编程方式对其进行配置,而无需任何声明。
我写了一篇关于此的博客文章 ,希望能为您提供更多细节。
嗯,Web应用程序的安全性有两个方面:身份validation和授权。 您在这里使用的是程序化身份validation (用户登录的方式)和声明性授权 (定义允许用户查看的内容)。 在我看来,混合两者都没有问题。
如果您将领域保留在web.xml
,您的应用程序将更加便携。 (这意味着您可以在没有更改的情况下在tomcat服务器中部署战争)。
- 在Windows中的Netbeans / Glassfish上添加jdbc驱动程序的位置?
- org.glassfish.jersey.internal.RuntimeDelegateImpl未找到
- 可以在运行时为@Schedule注释更改ejb参数吗?
- 为什么Json测试程序不起作用?
- 嵌入式GlassFish忽略Maven测试资源
- GlassFish 4.1 alternatedocroot,Access静态内容
- 存档中部署描述符文件WEB-INF / web.xml中的无效部署描述符
- Maven正试图从maven.ocean.net.au更新glassfish插件
- 需要澄清JMS与ActiveMQ bean /资源配置