Как ограничить действие отправки в JSP на основе роли пользователя?

#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();
  

Ожидаемый результат:

Комментарии:

1. может быть, лучше создать два разных действия, таких как deleteAction и sendAction , и ограничить deleteAction по роли пользователя

2. хм … не уверен. Почему? Потому что приведенный выше пример упрощен. На самом деле удаление существует во многих других *.jsp, но везде удаление должно быть разрешено только администраторам. Вот почему я ищу способ запретить с помощью шаблона delete .

3. Поэтому, я думаю, вы должны обработать это в своем сервлете. Что-то вроде этого может вам помочь: if(actionType.equals("delete") amp;amp; request.isUserInRole("administratorRole")) doDel();

4. Нет способа поиграть с шаблонами URL? Как я читал, они довольно ограничены, например, не поддерживают регулярные выражения. Или я что-то пропустил.?

5. Вы не можете написать регулярное выражение, и, как вы сказали, шаблон довольно ограничен