如何在web.xml中配置url映射以限制访问?

时间:2012-06-29 09:46:14

标签: servlets web.xml

我在以下结构中有几页。

--Project
  |---WebContect
      |----Admin/ *
      |----Author/ * 
      |----Readonly/ * 
      |----Index.jsp

我想限制用户访问AdminAuthorReadonly下的页面。我不希望任何人访问这些页面。如果有人试图这样做,应该重定向到index.jsp

我想到的最简单的解决方案是使用Filter,但我试图找出是否可以使用web.xml

3 个答案:

答案 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>