La manipulation AccessDenied avec la Méthode de Niveau de Sécurité
j'ai une méthode sécurisée avec ressort de sécurité comme suit:
@PreAuthorize("hasRole('add_user')")
public void addUser(User user) ;
et si un utilisateur sans enoguh autorisations essaie de l'appeler
un accessDenied exception est levée:
org.springframework.security.access.AccessDeniedException: Access is denied
ce que l'on attend, mais la question est, pourquoi le défini accès refusé-gestionnaire de
dans security.xml fichier de configuration est pas de travail:
<access-denied-handler error-page="accessDenied"/>
Je veux dire par pas de travail que lorsque l'utilisateur avec pas assez d'autorisation lorsque vous essayez d'appuyer sur le bouton de la commande addUser qui va appeler le service addUser (qui est seulement accessible par l'utilisateur dispose de cette autorisation) une AccessDenied Exception est levée et c'est le comportement souhaité, mais l'utilisateur n'est pas redirigé vers la accès refusé d'exception tel que configuré dans xml.
ne devrait pas l'utilisateur obtient automatiquement redirigé vers la page accès refusé lorsque cette exception est levée, ou je dois définir un tel comportement explicitement dans le code ?
veuillez en informer.
Je suis en utilisant Printemps de Sécurité 3.0.5 avec JSF 2.1 et ICEFaces 2
Mise à JOUR: applicationSecurity.xml:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:util="http://www.springframework.org/schema/util"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.0.4.xsd
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd">
<!-- Enable @pre, @post spring security method level annotations -->
<global-method-security pre-post-annotations="enabled" />
<http use-expressions="true" auto-config="true" access-denied-page="/accessDenied">
<session-management session-fixation-protection="none"/>
<remember-me token-validity-seconds="1209600"/>
<intercept-url pattern="/accessDenied" access="permitAll"/>
<intercept-url pattern="/login" access="permitAll"/>
<intercept-url pattern="/j_spring_security_check" access="permitAll" />
<intercept-url pattern="/faces/javax.faces.resource/**" access="permitAll" />
<intercept-url pattern="/xmlhttp/**" access="permitAll" />
<intercept-url pattern="/resources/**" access="permitAll" />
<intercept-url pattern="/scripts/**" access="permitAll" />
<intercept-url pattern="/images/**" access="permitAll" />
<intercept-url pattern="/css/**" access="permitAll" />
<!-- All pages requires authentication (not anonymous user) -->
<intercept-url pattern="/**" access="isAuthenticated()" />
<intercept-url pattern="/faces/**" access="isAuthenticated()" />
<form-login default-target-url="/"
always-use-default-target="true"
login-processing-url="/j_spring_security_check"
login-page="/login"
authentication-failure-url="/login?login_error=1"
/>
<logout logout-url="/logout" logout-success-url="/login" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="userDetailsServiceImpl"/>
</authentication-manager>
</beans:beans>
Mise à JOUR 2 : débogue avant d'exception:
DEBUG [http-bio-8080-exec-1] (PrePostAnnotationSecurityMetadataSource.java:93) - @org.springframework.security.access.prepost.PreAuthorize(value=hasRole('add_user')) found on specific method: public void com.myapp.service.impl.UserServiceImpl.addUser(com.myapp.domain.User) throws java.lang.Exception,org.springframework.security.access.AccessDeniedException
DEBUG [http-bio-8080-exec-1] (DelegatingMethodSecurityMetadataSource.java:66) - Adding security method [CacheKey[com.myapp.service.impl.UserServiceImpl; public abstract void com.myapp.service.UserService.addUser(com.myapp.domain.User) throws java.lang.Exception,org.springframework.security.access.AccessDeniedException]] with attributes [[authorize: 'hasRole('add_user')', filter: 'null', filterTarget: 'null']]
DEBUG [http-bio-8080-exec-1] (AbstractSecurityInterceptor.java:191) - Secure object: ReflectiveMethodInvocation: public abstract void com.myapp.service.UserService.addUser(com.myapp.domain.User) throws java.lang.Exception,org.springframework.security.access.AccessDeniedException; target is of class [com.myapp.service.impl.UserServiceImpl]; Attributes: [[authorize: 'hasRole('add_user')', filter: 'null', filterTarget: 'null']]
DEBUG [http-bio-8080-exec-1] (AbstractSecurityInterceptor.java:292) - Previously Authenticated: org.springframework.security.authentication.UsernamePasswordAuthenticationToken@c650d918: Principal: org.springframework.security.core.userdetails.User@db344023: Username: user@mycomp.com; Password: [PROTECTED]; Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: access_viewUsers; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffde5d4: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: E6BBAC0CD4499B1455227DC6035CC882; Granted Authorities: access_viewUsers
DEBUG [http-bio-8080-exec-1] (AffirmativeBased.java:53) - Voter: org.springframework.security.access.prepost.PreInvocationAuthorizationAdviceVoter@1d1e082e, returned: -1
DEBUG [http-bio-8080-exec-1] (AffirmativeBased.java:53) - Voter: org.springframework.security.access.vote.RoleVoter@1eab12f1, returned: 0
DEBUG [http-bio-8080-exec-1] (AffirmativeBased.java:53) - Voter: org.springframework.security.access.vote.AuthenticatedVoter@71689bf1, returned: 0
cet exemple fait sur mesure à la mise en œuvre, car il veut ajouter des données supplémentaires à la session de la date de refus d'accès se produit, je n'ai pas besoin de cette personnalisation, j'ai juste besoin de le comportement par défaut.
Merci de poster la sécurité complète de la configuration.
qu'entendez-vous exactement par "ne fonctionne pas"?
question mise à jour d'expliquer le ne travaillent pas le cas.
OriginalL'auteur fresh_dev | 2011-10-27
Vous devez vous connecter pour publier un commentaire.
Selon le ressort de Sécurité de la documentation de l'utilisateur de l'accès refusé-page attribut de l'élément a été déprécié au Printemps 3.0 et au-dessus.
Nous ne le suit dans notre application:
AccessDeniedHandlerImpl
.setErrorPage
méthode, en passant le nom du contrôleur d'affichage de votre page accès refuséAppel
super.handle(_request, _response, _exception);
à la fin de la gestionnaire. Le printemps va transférer le contrôle à la manette énumérés au point 2 ci-dessus.}
Voici mon XML:
AccessDeniedHandlerApp
s'étend 'AccessDeniedHandlerImpl`Voici mon Accès Refusé Contrôleur - je devrais avoir posté plus tôt - désolé à ce sujet. Afin d'obtenir la page d'accès non autorisé à venir, je devais utiliser une redirection:
S'il vous plaît laissez-moi savoir si cela ne résout pas il et je vais continuer à creuser - je viens de testé encore, localement, ici et cela devrait faire l'affaire.
}
assurez-vous - ici vous allez!
bien au-dessus de code ne fonctionne pas avec moi, accessDeniedException est levée, mais l'utilisateur n'est pas redirigé vers la page accès refusé !!!
il ne fonctionne pas pour moi aussi, une exception est levée, mais l'utilisateur n'est pas redirigé vers la coutume accès refusé gestionnaire de ref, des idées pourquoi ?
fait que vous aider les gars?
OriginalL'auteur jcurtin
J'ai couru dans le même problème que moi et a posté une autre question se rapportant à la même question. Après plusieurs heures de creuser autour, j'ai enfin trouvé la solution pour mon problème. Je sais que cette question est de 2 ans et+, mais pensé que je voudrais le mettre à jour avec les informations en cas il a de la valeur pour quelqu'un d'autre.
En un mot, j'ai remarqué que le
SimpleMappingExceptionResolver
était de la manipulation de l'exception et de les résoudre avec un mappage par défaut. Par conséquent, il n'y a pas d'exception à gauche de la bulle en haut de la pile pour lesExceptionTranslationFilter
qui redirige vers laaccess-denied-handler
.Veuillez voir Printemps de Sécurité ignorant accès refusé-gestionnaire au Niveau de la Méthode de Sécurité pour de plus amples informations.
OriginalL'auteur Eric B.
Printemps de Sécurité rediriger vers la page d'accès non autorisé seulement lorsque l'utilisateur n'avez pas l'autorisation d'accéder à la ressource. C'est, lorsque l'utilisateur est authentifié mais ne possède pas le permis de rôles.
Mais quand le problème n'est pas l'autorisation, l'authentification, la Sécurité Printemps redirige vers la page de connexion (pour permettre à l'utilisateur de s'authentifier lui-même/elle-même), pas à la page accès refusé.
Que vous avez une règle de vérification pour "isAuthenticated()" dans les règles, vous ne serez pas redirigé vers la page d'accès non autorisé, mais à la page de connexion.
Espère que cela aide.
OriginalL'auteur choquero70