Как вернуть 403 Forbidden in Spring MVC? - PullRequest
26 голосов
/ 05 сентября 2008

Я хочу, чтобы мой контроллер возвращал правильный код ответа HTTP, когда у пользователя нет разрешения на просмотр определенной страницы.

Ответы [ 5 ]

28 голосов
/ 19 июля 2016

Вы также можете просто бросить

org.springframework.security.access.AccessDeniedException("403 returned");

Возвращает 403 в заголовке ответа.

25 голосов
/ 05 марта 2015

Создать исключение, помеченное @ ResponseStatus , например. как это:

@ResponseStatus(HttpStatus.FORBIDDEN)
public class ForbiddenException extends RuntimeException {
}

Теперь просто добавьте это исключение в ваш метод-обработчик, и ответ будет иметь статус 403.

12 голосов
/ 05 сентября 2008

Недоброкачественная

Если вы используете простые представления JSP (как это обычно бывает), просто добавьте

<% response.setStatus( 403 ); %>

где-то в вашем файле просмотра. На вершине хорошее место.

Detail

В MVC я всегда устанавливал бы это в представлении, и в большинстве случаев с Spring-MVC используйте SimpleMappingExceptionResolver для представления правильного представления в ответ на выброшенное исключение времени выполнения.

Например: создайте и добавьте PermissionDeniedException в вашем контроллере или слое обслуживания и укажите точку разрешения исключений для файла вида permissionDenied.jsp. Этот файл представления устанавливает статус 403 и показывает пользователю соответствующее сообщение.

В вашем XML-файле Spring bean:

<bean id="exceptionResolver"
      class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
  <property name="exceptionMappings">
    <props>
      <prop key="PermissionDeniedException">          
        rescues/permissionDenied
      </prop>
      ... set other exception/view mappings as <prop>s here ...
    </props>
  </property>
  <property name="defaultErrorView" value="rescues/general" />
</bean>

<bean id="viewResolver"
      class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/views/" />
  <property name="suffix" value=".jsp" />
</bean>

Если вам необходимо реализовать механизм входа пользователя в систему, взгляните на Spring Security (ранее Acegi Security).

12 голосов
/ 05 сентября 2008

Использование ExceptionResolver - отличный способ, но если вы просто хотите, чтобы это не зависело от вида, вы, безусловно, могли бы позвонить на response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable"); в вашем контроллере.

5 голосов
/ 05 сентября 2008

Используйте это: response.setStatus(403).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...