我在以下结构中有几页。
--Project
|---WebContect
|----Admin/ *
|----Author/ *
|----Readonly/ *
|----Index.jsp
我想限制用户访问Admin
,Author
和Readonly
下的页面。我不希望任何人访问这些页面。如果有人试图这样做,应该重定向到index.jsp
。
我想到的最简单的解决方案是使用Filter
,但我试图找出是否可以使用web.xml
。
答案 0 :(得分:15)
如果您希望 nobody 能够直接访问这些页面,只需将它们放在/WEB-INF
文件夹中即可。
Project
`-- WebContect
|-- WEB-INF
| |-- Admin
| |-- Author
| `-- Readonly
`-- Index.jsp
这样,页面不可公开访问,而只能由执行转发的servlet访问。当最终用户尝试直接访问它时,他将得到的只是HTTP 404错误。
另一种方法是配置无角色<security-constraint>
。
<security-constraint>
<display-name>Restrict direct access to certain folders</display-name>
<web-resource-collection>
<web-resource-name>Restricted folders</web-resource-name>
<url-pattern>/Admin/*</url-pattern>
<url-pattern>/Author/*</url-pattern>
<url-pattern>/Readonly/*</url-pattern>
</web-resource-collection>
<auth-constraint />
</security-constraint>
当最终用户尝试访问它们时,他将得到的只是HTTP 403错误。
无论哪种方式,都无法以这种方式将最终用户重定向到index.jsp
。只有Filter
才能做到这一点。您可以将index.jsp
配置为404或403的错误页面位置
<error-page>
<error-code>404</error-code>
<location>/index.jsp</location>
</error-page>
但这会涵盖所有 404(或403),不确定这是否是你想要的。
答案 1 :(得分:0)
<security-constraint>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<--! These are the groups in AD -->
<role-name>Engineering</role-name>
<role-name>Migration Expert</role-name>
<role-name>Developers</role-name>
</auth-constraint>
</security-constraint>
<security-constraint>
<web-resource-collection>
<url-pattern>/update/*</url-pattern>
</web-resource-collection>
</security-constraint>
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Services Portal</realm-name>
</login-config>
答案 2 :(得分:0)
如果您希望按角色权限对网页/文件夹进行大访问,则必须在web-xml文件中包含 security-constraint
<security-constraint>
<web-resource-collection>
<web-resource-name>DESC_OF_FOLDER</web-resource-name>
<url-pattern>/users/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>REGISTERED_USER_ROLE</role-name>
</auth-constraint>
</security-constraint>
如果您使用标准Jaas身份验证
,则可以通过此代码获取角色 if ((request.getUserPrincipal().getName()) != null) {
String userName = request.getUserPrincipal().getName().trim();
.....
if (request.isUserInRole("REGISTERED_USER_ROLE")) {
.....
}
}
希望这有帮助
<强>更新强>
对于重定向到登录页面,你应该在web.xml中也有这样的东西
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>