Frage

Ich möchte meinen controller zurückgeben, den richtigen HTTP-response-code, wenn der Benutzer keine Berechtigung zum anzeigen einer bestimmten Seite.

War es hilfreich?

Lösung

Quickie

Wenn Sie mit einfachen JSP-Ansichten (wie fast üblich), dann fügen Sie einfach

<% response.setStatus( 403 ); %>

irgendwo in Ihrer view-Datei.An der Spitze ist ein schöner Ort.

Detail

In MVC, würde ich setzen Sie diese immer im Blick und in den meisten Fällen mit Spring-MVC, verwenden Sie die SimpleMappingExceptionResolver präsentieren Sie die richtige Ansicht in der Antwort zu einer ausgelösten Exception zur Laufzeit.

Zum Beispiel:erstellen Sie und werfen Sie ein PermissionDeniedException in Ihrem controller oder service-Schicht und die Ausnahme-resolver zeigen Sie auf eine view-Datei permissionDenied.jsp.Diese Ansicht Datei legt den 403-status und zeigt dem Benutzer eine entsprechende Meldung.

In Ihrer Spring-bean-XML-Datei:

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

Wenn Sie implementieren müssen, um eine Benutzer-login-Mechanismus, werfen Sie einen Blick auf Spring Security (vormals Acegi Security).

Andere Tipps

Sie können auch nur werfen

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

Dies gibt eine 403-in der Antwort-header.

Erstellen Sie eine Ausnahme kommentiert mit @ResponseStatus z.B.wie diese:

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

Jetzt werfen, dass die Ausnahme in der handler-Methode und die Antwort haben-Statuscode 403.

Mit einem ExceptionResolver ein guter Weg zu gehen, aber wenn Sie wollen einfach nur diese zu Ansicht-unabhängig ist, können Sie sicher rufen Sie response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable"); in Ihrem Controller.

Benutzen Sie diese:response.setStatus(403).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top