Printemps de Configuration de la Sécurité @Afin de ne pas unique exception
J'ai essayé d'enregistrer plusieurs filtres dans mon Printemps Configuration de la Sécurité, cependant j'ai toujours le même exception:
04-Nov-2015 14:35:23.792 AVERTISSEMENT [RMI Connexion TCP(3)-127.0.0.1]
org.springframework.web.contexte.de soutien.AnnotationConfigWebApplicationContext.actualiser
Exception rencontrée pendant l'initialisation du contexte - l'annulation
actualisation de la tentative
org.springframework.les haricots.usine.BeanCreationException: Erreur
la création de haricot avec nom
'org.springframework.de sécurité.config.annotation.web.la configuration.WebSecurityConfiguration':
L'Injection de autocâblés dépendances a échoué; nested exception est
java.lang.IllegalStateException: @Commande sur WebSecurityConfigurers doit
être unique. De l'ordre de 100 a déjà été utilisé, il ne peut donc pas être utilisé sur
com.payment21.webapp.MultiHttpSecurityConfig$ApiWebSecurityConfigurationAdapter$$EnhancerBySpringCGLIB$$35c79fe4@1d381684
trop.
Depuis mes propres tentatives ne fonctionnent pas, j'ai essayé le exactement le même code comme indiqué dans le Printemps de référence sur la Sécurité:
@EnableWebSecurity
public class MultiHttpSecurityConfig {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER").and()
.withUser("admin").password("password").roles("USER", "ADMIN");
}
@Configuration
@Order(1)
public static class ApiWebSecurityConfigurationAdapter extends WebSecurityConfigurerAdapter {
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/api/**")
.authorizeRequests()
.anyRequest().hasRole("ADMIN")
.and()
.httpBasic();
}
}
@Configuration
public static class FormLoginWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.anyRequest().authenticated()
.and()
.formLogin();
}
}
}
Pour isoler l'erreur que j'ai essayé de remplacer les web.xml par Java, mais il ne fonctionne pas non plus. Je n'ai aucune idée de ce qui est mal, est la doc de mal? Quelque chose dans mon application mess avec la configuration? Système démarre correctement, à moins que j'ai enregistrer un deuxième WebSecurityConfigAdapter.
Ce sont mes dépendances:
compile 'org.springframework:spring-webmvc:4.2.2.RELEASE'
compile 'org.springframework:spring-messaging:4.2.2.RELEASE'
compile 'org.springframework:spring-websocket:4.2.2.RELEASE'
compile 'org.springframework:spring-aop:4.2.2.RELEASE'
compile'javax.servlet:javax.servlet-api:3.0.1'
compile 'org.springframework.security:spring-security-web:4.0.3.RELEASE'
compile 'org.springframework.security:spring-security-config:4.0.3.RELEASE'
Vous devez vous connecter pour publier un commentaire.
Il peut être intéressant de noter, l' @Afin d'annotation doit être au niveau de la classe. C'est un peu déroutant car @Journeycorner configuration est un multiclass exemple. Mon exemple avec les importations 🙂
J'ai trouvé l'erreur... personne n'a jamais postes d'importations dans les extraits. Nous sommes à l'aide d'un multi module de configuration de projet, et IntelliJ ne pas reconnaître le Printemps des annotations et utilisé
au lieu de
Depuis le Printemps n'a pas analyser le bon annotations, il a été en supposant que la valeur par défaut de 100 pour les deux configurations.
Généralement, cette exception se produit lorsque le même haricot est résolu à deux reprises.
Par exemple, si un
@Configuration
l'importation d'un fichier applicationContext.xml que de résoudre le même haricot, lorsque l'application démarre essaie de l'enregistrer (dans votre casMultiHttpSecurityConfig
) deux fois, et vous obtenez cette erreur.J'ai résolu l'erreur de suppression de la fève définition de l'XML.
@ComponentScan
annotation qui inclus le répertoire contenant la sécurité bean. Et une autre fois par le@SpringBootApplication
annotation qui est assis dans le même répertoire. Après la suppression du répertoire inclure l'attribut, le problème a disparu.Peut-être que vous avez annoté une autre classe avec le @EnableWebSecurity annotation. Sachez qu'une classe peut implémenter cette annotation. Espère que cela va vous aider!
Mettre @Commande(1000) sur la deuxième WebSecurityConfigurerAdapter a fonctionné pour moi
Peut-être que vous avez annoté une autre classe avec le @EnableWebSecurity annotation. Sachez qu'une classe peut implémenter cette annotation. Espère que cela va vous aider!
J'ai récemment rencontré le même problème, mais n'était pas en mesure de trouver une réponse, n'importe où pour me pointer dans la bonne direction. J'ai fini par retracer mes pas dans git l'histoire pour savoir que le seul changement est l'ajout de @RefreshScope annotation de ma classe.
Par la suppression de l' @RefreshScope annotation ma demande travaillé.
Vous pourriez avoir de la configuration avec
@order(100)
annotation quelque part en vous configuration spring. essayez de supprimer@order(100)
annotation ou donner une autre valeur de la commande.J'ai eu le même problème et je l'ai résolu cette erreur se déplaçant @Configuration annotation au niveau de la classe.
Ma question ai résolu quand j'ai ajouté cette description à la Sécurité Config:
C'est parce que le Printemps de sécurité utilise WebSecurityConfigurerAdapter sous le capot et cet adaptateur est à l'aide de la commande(100), d'où le printemps ne permet pas de dupliquer l'ordre de la séquence.
Dans mon cas, j'avais mis le
@EnableOAuth2Sso
annotation sur la classe annotée avec@SpringBootApplication
, mais j'ai eu aussi une catégorie distincte d'étendreWebSecurityConfigurerAdapter
. Comme la documentation de@EnableOAuth2Sso
dit:Depuis un adaptateur par défaut a été ajouté, je me suis retrouvé avec deux, ce qui a provoqué l'exception.
La solution était bien sûr pour déplacer le
@EnableOAuth2Sso
annotation à la classe qui s'est étenduWebSecurityConfigurerAdapter
.