我正在探索实现编程安全的纯Java方法,特别是基于我的glassfish服务器的jdbc领域的登录用户。
所以,基本上,在我的登录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>请注意,我没有添加任何表单登录配置来定义表单登录页面和表单错误页面。
如果我定义了安全约束,例如
<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中定义的jdbc领域的编程安全性(request.login)?
Update我刚刚看到有可能在glassfish-application.xml中指定一个领域,为了指定领域,构建ear而不是war是更好的方法吗?
发布于 2013-04-19 07:03:12
当您使用特定于容器的(专有的)登录模块(如GlassFish JDBC登录模块/领域)时,不可能采用可移植(纯Java )的纯编程方法。
Java 6中有这样一个API : JASPIC。使用该API (技术上的SPI),您可以构建可移植的身份验证模块,并对它们进行完全编程配置,而不需要任何声明。
我写了一个关于这个的博客文章,希望能为您提供更多的细节。
发布于 2013-04-18 14:09:23
那么,web应用程序的安全性有两个方面:身份验证和授权。这里使用的是编程身份验证(用户登录的方式)和声明性授权(定义允许用户查看的内容)。在我看来,两者混合是没有问题的。
如果您将您的领域保留在您的web.xml中,您的应用程序将更加可移植。(这意味着您可以将war部署在tomcat服务器中,而不需要更改)。
https://stackoverflow.com/questions/16084710
复制相似问题