L'ajout d'un filtre personnalisé pour être invoqué après le printemps-filtre de sécurité dans un Servlet 3+ environnement
Je suis en utilisant le Printemps-Sécurité 3.2.4 et le Printemps de Démarrage 1.1.0 (et c'est lié dépendances versions 4.X).
Je suis en train d'écrire une application web qui sera lancé dans un tomcat intégré.
Je suis en train d'ajouter deux filtres supplémentaires(non liée à la sécurité Printemps) que l'un d'eux sera appelé avant le Printemps-Sécurité-FilterChainProxy et l'autre sera appelé après le Printemps-Sécurité-FilterChainProxy.
Mon Printemps-fichiers de configuration de Sécurité:
@Configuration
@EnableWebMvcSecurity
public class SecurityCtxConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("pass").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf()
.disable()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.usernameParameter("user").passwordParameter("password");
}
}
Et la classe Principale (Application.class):
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application {
@Bean
RequestFilter beforeSpringSecurityFilter(){
return new RequestFilter();
}
@Bean
RequestFilter afterSpringSecurityFilter(){
return new RequestFilter();
}
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
}
Et le Filtre de mise en œuvre:
public class RequestFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
filterChain.doFilter(request, response);
}
}
Est-il un moyen de controler l'invocation de l'ordre lors de la prise en compte de la FilterChainProxy (c'est-à beeing créé par le WebSecurityConfigurerAdapter ?
Pour être percise, la commande est:
- demande-filtre-1
- Printemps-Sécurité FilterChain
- demande-filtre-2
Grâce
OriginalL'auteur Modi | 2014-06-23
Vous devez vous connecter pour publier un commentaire.
La
FilterChainProxy
utiliser d'ici le Printemps de Sécurité n'est pasOrdered
(si c'était vous pouvez commander tous vos filtres). Mais vous devriez être capable de l'enregistrer dans unFilterRegistrationBean
qui estOrdered
et enregistrer vos autres filtres de la même façon. Dans le cas du filtre de sécurité, vous pouvez injecter par nom dans l'enregistrement de haricot. Les autres, vous pouvez probablement s'injecter à l'appel d'une@Bean
méthode.Regardez le code dans
EmbeddedWebApplicationContext
où il analyse lesFilterRegistrationBeans
. Nous n'avons pas le double registre de l'filtres qui font déjà partie d'un enregistrement.Il a obtenu, merci beaucoup.
OriginalL'auteur Dave Syer
D'accord avec tout ce qui l'a déclaré Dave Syer 😉 mais il a souhaité ajouter un Java Config exemple d'utilisation de la FilterRegistrationBean.
Dans ma situation, j'ai découvert que mon personnalisée filtre de sécurité (à l'aide de Spring Security) a été déclenché deux fois pour chaque demande. L'ajout de la
FilterRegistrationBean
config fixe.(Concernant mon problème spécifique de filtre être inscrit deux fois dans le Contexte de l'Application Plutôt que d'utiliser un
FilterRegistrationBean
, j'ai aussi trouvé la re-mise en œuvre de laMyAuthenticationFilter
d'hériter deOncePerRequestFilter
au lieu deGenericFilterBean
également travaillé. Cependant,OncePerRequestFilter
de soutien est de Servlet 3.x vers le haut et depuis que j'ai écrit une bibliothèque publique, le soutien de la Servlet 2.x peut être nécessaire)MyAuthenticationEntryPoint
?OriginalL'auteur arcseldon
Si vous utilisez web.xml approches, vous pouvez suivre ce:
https://stackoverflow.com/a/11929129/1542363
Si vous utilisez Java config approches, vous pouvez le faire dans
WebSecurityConfigurerAdapter
Toujours vérifier la version de bibliothèque que vous utilisez, et de consulter le document spécifique pour le bon ordre des chaînes de filtres:
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#ns-custom-filters
Ou, si vous utilisez AbstractSecurityWebApplicationInitializer, vous pouvez utiliser le
insertFilters
ouappendFilters
.Plus d'info Vous pouvez consulter ce:
https://docs.spring.io/spring-security/site/docs/current/reference/htmlsingle/#csrf-multipart
OriginalL'auteur GMsoF