Problème de sécurité de printemps avec l'erreur 404?
salutations à tous, je suis en utilisant le printemps de sécurité 3.0.2, urlRewrite 3.1.0
et j'ai un problème avec le printemps de sécurité que j'ai une règle que toutes les pages de l'application requiert une authentification à l'exception de quelques pages pour mon security.xml est:
<http use-expressions="true" >
<intercept-url pattern="/" access="permitAll" />
<intercept-url pattern="/error" filter="none" />
<intercept-url pattern="/**" access="isAuthenticated()" />
.
.
.</http>
dans le web.xml j'ai défini la page d'erreur
<error-page>
<error-code>404</error-code>
<location>/p/error</location>
</error-page>
et le problème est que si je ne suis pas un utilisateur connecté, et tapé une url qui n'existe pas dans l'application comme application/notFoundUrl le printemps de sécurité appariés cette page pour le modèle /** qui nécessite une authentification, de sorte que l'utilisateur n'est pas redirigé vers la page d'erreur comme prévu, mais redirigé vers la page de connexion et d'après elle, redirigé vers la page d'erreur
et je veux que si l'utilisateur a tapé un mauvais url si il est connecté ou non, il est redirigé vers la page d'erreur directement.
je pense que le problème est lié à la web.xml ici:
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- Beans in these files will makeup the configuration of the root web application context -->
<!-- Bootstraps the root web application context before servlet initialization-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Deploys the 'projects' dispatcher servlet whose configuration resides in /WEB-INF/servlet-config.xml-->
<servlet>
<servlet-name>p</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/servlet-config.xml
</param-value>
</init-param>
</servlet>
<!-- Maps all /p URLs to the 'p' servlet -->
<servlet-mapping>
<servlet-name>p</servlet-name>
<url-pattern>/p/*</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/p/error</location>
</error-page>
<!-- force encoding on the requests -->
<filter>
<filter-name>encoding-filter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>FORWARD</dispatcher>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>UrlRewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>UrlRewriteFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Security -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/application-config.xml
/WEB-INF/app-security.xml
/WEB-INF/mvc-config.xml
</param-value>
</context-param>
<session-config>
<session-timeout>1</session-timeout>
</session-config>
</web-app>
toute idée comment résoudre ce problème ?
source d'informationauteur Mahmoud Saleh
Vous devez vous connecter pour publier un commentaire.
Vous avez dit:
Printemps de sécurité va intercepter chaque demande avant qu'il sait que son url est valide ou pas, donc, une façon de le faire serait d'intercepter toutes les url valides avec certains modèles, et ajouter à la fin d'un modèle général qui pourrait être consulté par toute personne.
Le problème de cette configuration est qu'il est probablement difficile de trouver des modèles pour toutes les url valides si votre application est complexe.
Yep juste ajouter ceci:
Qui fera en sorte que n'importe qui peut accéder à vos pages d'erreur.
lorsque vous définissez l'attribut
access="true"
vous dites de printemps de sécurité pour vérifier si l'utilisateur a l'attribut de sécurité (ce qui est normalement un rôle) nommé "vrai" . Je ne pense pas que c'est votre but?à contourner la sécurité, vous pouvez définir
filters="none"
et passez l'accès attribut:<intercept-url pattern="/errorpage" filters="none" />
voir la documentation de <interception url>
Ajouter /erreur à votre liste de
<intercept-url/>
éléments de sorte qu'il ne nécessite pas d'authentification pour l'accès.