#java #jsp #security #tomcat #servlets
#java #jsp #Безопасность #tomcat #сервлеты
Вопрос:
У меня есть some.jsp, в котором есть кнопка действия, например, удалить. У меня есть пользователи и их роли. Tomcat 8 обеспечивает безопасность. Допустим, пользователь произвел некоторые действия и нажал кнопку отправить, URL с параметрами переходит к сервлету. Давайте рассмотрим пример сопоставления сервлетов:
<servlet>
<servlet-name>myServlet</servlet-name>
<servlet-class>servlets.myServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sName</servlet-name>
<url-pattern>/action1</url-pattern>
</servlet-mapping>
<security-constraint>
<display-name>administrators</display-name>
<web-resource-collection>
<web-resource-name>action1</web-resource-name>
<description>action1</description>
<url-pattern>/action1</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>allowed for administrator</description>
<role-name>administratorRole</role-name>
</auth-constraint>
</security-constraint>
Исходя из вышесказанного, все, что поставляется с <url-pattern>/action1</url-pattern>
, разрешено только администратору.
Но я хочу ограничить только кнопку удалить. Все остальное в этом some.jsp должно быть разрешено другим пользователям. Как это реализовать?
Часть JSP:
<form name="frm" action="action1">
<input type="hidden" name="prm1" value="${prm1}"/>
<input type="hidden" name="prm2" value="${prm2}"/>
<input id="btnid" type="submit" value="send" name="btn"/>
</form>
<form name="frm" action="action1">
<input type="hidden" name="prm1" value="${prm1}"/>
<input type="hidden" name="prm2" value="${prm2}"/>
<input id="btnid" type="submit" value="delete" name="btn"/>
</form>
Часть сервлета:
String actionType=request.getParameter("btn");
if(actionType.equals("send")) doSend();
if(actionType.equals("delete")) doDel();
Ожидаемый результат:
-
URL, подобный: http://localhost:8084/action1?prm1=111amp;prm2=221amp;btn=send может выполняться любым пользователем.
-
URL, подобный: http://localhost:8084/action1?prm1=111amp;prm2=221amp;btn=delete можно выполнять только для администраторов.
Комментарии:
1. может быть, лучше создать два разных действия, таких как
deleteAction
иsendAction
, и ограничитьdeleteAction
по роли пользователя2. хм … не уверен. Почему? Потому что приведенный выше пример упрощен. На самом деле удаление существует во многих других *.jsp, но везде удаление должно быть разрешено только администраторам. Вот почему я ищу способ запретить с помощью шаблона delete .
3. Поэтому, я думаю, вы должны обработать это в своем сервлете. Что-то вроде этого может вам помочь:
if(actionType.equals("delete") amp;amp; request.isUserInRole("administratorRole")) doDel();
4. Нет способа поиграть с шаблонами URL? Как я читал, они довольно ограничены, например, не поддерживают регулярные выражения. Или я что-то пропустил.?
5. Вы не можете написать регулярное выражение, и, как вы сказали, шаблон довольно ограничен