2012-06-29 1 views
4

У меня есть несколько страниц в следующей структуре.Как настроить отображение URL-адресов в web.xml для ограничения доступа?

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

Я хочу, чтобы ограничить доступ пользователя страницы под Admin, Author и Readonly. Я не хочу, чтобы кто-либо обращался к этим страницам. И если кто-то пытается это сделать, следует перенаправить на index.jsp.

Самое легкое решение, которое приходит мне на ум, использует Filter, но я пытаюсь найти, можно ли его использовать, используя web.xml.

+0

Или другими словами, я хочу разрешить доступ «index.jsp» только независимо от роли или авторизации. –

ответ

14

Если вы хотите, чтобы никто не сможет получить доступ к этим страницам напрямую, просто поместите их в папку /WEB-INF.

Таким образом, страницы не являются общедоступными, а только сервлетом, который выполняет перемотку вперед. Когда конечный пользователь пытается получить к нему доступ напрямую, все, что он получит, это ошибка 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.

В любом случае, невозможно перенаправить enduser на index.jsp таким образом. Только Filter может это сделать. Вы могли настроить index.jsp как ошибка расположения страницы для 404 или 403

<error-page> 
    <error-code>404</error-code> 
    <location>/index.jsp</location> 
</error-page> 

Но это будет охватывать все 404 (или 403-х), не уверен, если это то, что вы хотите.

+0

Согласитесь с вами, обработка 404 с index.jsp была бы плохой идеей. Я был бы даже счастлив, если бы смог достичь только 1-й части. –

+1

Тогда я считаю, что держать 404 просто отлично. Почему конечный пользователь только перенаправляется на индексную страницу только для определенного набора URL-адресов, о которых конечный пользователь не должен даже знать? У вас есть все существующие ссылки где-то в сети, которые указывают на те ограниченные URL-адреса? Ну, тогда вы действительно не можете обойти фильтр для этого. Убедитесь, что фильтр выполняет перенаправление 301, а не перенаправление 302. Таким образом, поисковые роботы удаляют старый URL из индекса. – BalusC

+0

Согласитесь, enduser должен знать о любых ограниченных URL-адресах, к которым он пытается получить доступ. Во-вторых, ни одна из ссылок еще не опубликована, поэтому ваша точка делает сцену –

0

вы попробовали? (Пример для отображения 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> 
+0

Как это поможет? –

+0

Извините, я нашел образец здесь с образцом и контролем аутентификации в картировании url ... я попробую помочь. Http: //www.coderanch.com/t/584071/Tomcat/Exclude-url-authorized-access-web –

+2

Почему вы копируете фрагменты, найденные в Google, в то время как вы вообще не понимаете, что вы на самом деле отвечаете? Просто ответьте на вопросы, на которые вы можете ответить сверху, и можете подробно объяснить свои работы. – BalusC

0

если вы хотите грандиозном доступ к страницам/папка, разрешения роли вы должны иметь безопасность-ограничение в файле веб-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>