Question

Je veux que mon contrôleur pour revenir au droit code HTTP de la réponse lorsque l'utilisateur ne dispose pas de l'autorisation d'afficher une page en particulier.

Était-ce utile?

La solution

Quickie

Si vous utilisez de la plaine JSP points de vue (comme la plupart des communes), puis il suffit d'ajouter

<% response.setStatus( 403 ); %>

quelque part dans votre fichier de vue.Au sommet se trouve un endroit agréable.

Détail

Dans MVC, je serais toujours dans la vue, et dans la plupart des cas avec Spring-MVC, utilisez la SimpleMappingExceptionResolver pour présenter la vue correcte en réponse à la levée d'une Exception d'exécution.

Par exemple:créer et lancer un PermissionDeniedException dans votre contrôleur ou de la couche de service et avez l'exception de résolution point de vue de fichier permissionDenied.jsp.Ce point de vue des ensembles de fichier de l'état 403 et indique à l'utilisateur un message approprié.

Au Printemps de haricots fichier XML:

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

Si vous avez besoin de mettre en œuvre un utilisateur mécanisme de connexion, jetez un oeil à Printemps De Sécurité (anciennement Acegi Security).

Autres conseils

Vous pouvez aussi jeter

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

Cette fonction retourne une 403 dans l'en-tête de réponse.

Créer une Exception annoté avec @ResponseStatus par exemplecomme ceci:

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

Maintenant, il suffit de jeter cette Exception dans votre méthode de gestionnaire et de la réponse de l'état 403.

À l'aide d'un ExceptionResolver est un excellent moyen d'aller, mais si vous voulez que ce soit indépendant de la vue, vous pourriez certainement faire appel à response.sendError(HttpServletResponse.SC_FORBIDDEN, "AdditionalInformationIfAvailable"); dans votre Contrôleur.

Utilisez ceci:response.setStatus(403).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top