我有一个带有jdbcRealm安全文件夹secureuser和secureadmin的web应用程序项目(NetBeans 7.1.2 + GlassFish 3.1.2)。 jdbc安全性通常是登录形式,增加了安全性约束。 Glassfish部署描述符和web.xml一样定义。 Servlet配置默认为“/ faces / *”。
当尝试访问“localhost8080 / app / faces / secureduser /”形式的网址时,安全性按预期工作。但是,如果使用“localhost8080 / app / faces / faces / secureduser /”,则会绕过安全性。其他安全文件夹也是如此。
在安全约束中定义的url模式中添加“/ faces”,[如果定义的模式为“/ faces / secureduser”,则添加“/ faces / faces / secureduser”]似乎总是覆盖安全性。
由于登录表单是JSF,或者初始页面的设计要求至少是外部安全性,因此不能使用“app / faces /”形式的上下文过滤器。
即使用户输入添加的前缀“/ faces”,如何才能保持安全性?
答案 0 :(得分:0)
以下是Servlet 3.0规范中关于如何完成URL路径匹配的段落:
The first successful match is used with no further matches attempted:
容器必须使用区分大小写的字符串比较来匹配
因此,精确匹配优先于前缀,优先于扩展,最后是通用模式。
所以你可以做的就是添加一个没有指定角色的通用映射/*
。通用映射最后匹配,如果没有指定角色,则没有人可以像这样访问资源:
<security-constraint>
<web-resource-collection>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
<!--No Authorization Required -->
<security-constraint>
<web-resource-collection>
<url-pattern>/faces/index.xhtml</url-pattern>
</web-resource-collection>
</security-constraint>
<!--All roles can access -->
<security-constraint>
<web-resource-collection>
<url-pattern>/faces/users.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
</security-constraint>
Servlet 3.0 Documentation请参见第12.1节“URL路径的使用”
答案 1 :(得分:0)
由于您尚未发布代码,因此无法确定问题所在, 查看以下博客
http://jugojava.blogspot.in/2011/02/jdbc-security-realm-with-glassfish-and.html
您的web.xml是您指定页面访问权限的地方
例如:
<security-constraint>
<web-resource-collection>
<web-resource-name>admin</web-resource-name>
<url-pattern>/admin/*</url-pattern>
<http-method>GET</http-method>
<http-method>POST</http-method>
</web-resource-collection>
<auth-constraint>
<role-name>ADMIN</role-name>
</auth-constraint>
</security-constraint>
在上面的例子中,只有admin用户可以访问admin文件夹下的页面(网页/ admin)
<强>更新强>
只需更改
即可<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
我已将默认/ faces /更改为* .xhtml。
并删除security-contrainst中的所有/ faces应解决访问问题(/ faces / faces)。