我有以下结构的几页。
--Project
|---WebContect
|----Admin/ *
|----Author/ *
|----Readonly/ *
|----Index.jsp
我想限制访问的网页,用户Admin
, Author
和Readonly
。 我不希望任何人访问这些页面。 如果有人试图这样做,应该被重定向到index.jsp
。
那来在我心中最简单的方法是使用Filter
,但我试图找到,如果可能用做web.xml
。
如果你想, 没有人能够直接访问这些页面,只需把它们放在/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的),不知道这是你想要的。
你试试这个? (样品为URL映射)
<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>
如果你想通过角色权限隆重访问网页/文件夹,你必须在你的网络的XML文件的安全性约束
<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")) {
.....
}
}
希望这可以帮助
UPDATE
而对于重定向到登录页面,你应该也有在web.xml是这样的
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/error.jsp</form-error-page>
</form-login-config>