Configurer l'actionneur d'extrémité de sécurité
Le Printemps de Démarrage de l'Actionneur d'extrémité sont, par défaut, protégé par http de base de la sécurité.
Cela peut-il être modifié pour utiliser le Printemps de Sécurité?
J'ai configuré le Printemps de Sécurité, avec succès et de l'utiliser pour protéger mes autres pages.
J'ai essayé security.basic.enabled: false
et l'ajout de .antMatchers("/manage/**").hasRole("ADMIN")
dans mes autoriser des demandes (remarque je suis en utilisant une url différente en tant que root pour les points de terminaison), mais cela n'a pas aide.
Je reçois une base http auth journal, qui n'a pas les utilisateurs configurés dans le AuthenticationManager.
Une idée?
EDIT - fournir plus de détails -
Mon Application.java ressemble:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application extends WebMvcConfigurerAdapter {
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/app").setViewName("app/index");
registry.addViewController("/app/login").setViewName("app/login");
}
@Bean
public ApplicationSecurity applicationSecurity() {
return new ApplicationSecurity();
}
@Order(Ordered.LOWEST_PRECEDENCE - 8)
protected static class ApplicationSecurity extends WebSecurityConfigurerAdapter {
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
//@formatter:off
auth.inMemoryAuthentication()
.withUser("test1")
.password("test1pw")
.roles("USER", "ADMIN")
.and()
.withUser("test2")
.password("test2pw")
.roles("USER");
//@formatter:on
}
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http
.csrf()
.disable()
.authorizeRequests()
.antMatchers("/app/login").permitAll()
.antMatchers("/app/**").hasRole("USER")
.antMatchers("/manage/**").hasRole("ADMIN")
.and()
.formLogin()
.loginPage("/app/login")
.failureUrl("/app/login?error")
.defaultSuccessUrl("/app")
.permitAll()
.and()
.logout()
.logoutUrl("/app/logout")
.logoutSuccessUrl("/app/login?logout");
//@formatter:on
}
@Override
public void configure(WebSecurity web) throws Exception {
//@formatter:off
web
.ignoring()
.antMatchers("/assets/**");
//@formatter:on
}
}
}
Dans mon application.yml
j'ai aussi:
management:
context-path: /management
Noter que la configuration est la même que vous le guide que vous avez mentionné.
Maintenant ce que je voudrais attendre - ou comme pour la configuration, c'est que l' /gérer les points de terminaison comme la santé, les mappages etc serait protégé par les utilisateurs à partir de la mesure AuthenticationManager.
J'ai aussi essayé d'ajouter management.security.enabled=false
, et cela désactive l'authentification, par exemple /gérer/mappings.
La problématique de la chose, cependant, est que j'ai explicitement dit Printemps de Sécurité pour protéger ces urls via:
@Override
protected void configure(HttpSecurity http) throws Exception {
//@formatter:off
http
.authorizeRequests()
.antMatchers("/app/login").permitAll()
.antMatchers("/app/**").hasRole("USER")
.antMatchers("/manage/**").hasRole("ADMIN")
mais cela ne fonctionne pas. Remarque d'autres autoriser les allumettes faire le travail.
Je me demande si cela a quelque chose à faire dans les délais et l'ordre. J'ai copié @Order(Ordered.LOWEST_PRECEDENCE - 8)
de l'échantillon, mais je ne sais pas pourquoi - 8 est utilisé.
De se plonger un peu plus profond, j'ai également exécuter l'échantillon (https://github.com/spring-projects/spring-boot/blob/master/spring-boot-samples/spring-boot-sample-web-method-security) moi-même et je vois le même comportement dans l'exemple d'application.
La gestion de la sécurité est semble complètement indépendants l'un de l' user
et admin
les utilisateurs configurés dans l'échantillon dans la mémoire de l'authentification.
OriginalL'auteur Marcel Overdijk | 2014-04-19
Vous devez vous connecter pour publier un commentaire.
Il est Printemps de Sécurité (quoi d'autre avez-vous pense que nous sommes d'utilisation?). Si vous voulez juste pour garder la valeur par défaut des règles de sécurité et de personnaliser le
AuthenticationManager
il devrait fonctionner si vous utilisez leAuthenticationManagerBuilder
comme recommandé par le Printemps de l'équipe de Sécurité. Le méthode sécurisée de l'échantillon a le comportement que vous cherchez, vous pouvez copier la configuration de la figure à partir de là. La clé de la chose, si vous voulez remplacer le Boot par défaut, la stratégie d'authentification, c'est d'obtenirAuthenticationManager
configuré dans unGlobalAuthenticationConfigurerAdapter
comme dans l'exemple de.Vous pouvez désactiver la gestion de la sécurité avec
management.security.enabled=false
(en supposant que la Sécurité Printemps est sur le chemin de la classe). Il est mentionné dans la guide de l'utilisateur, mais n'hésitez pas à proposer des éclaircissements.Merci. Je vais laisser ma réponse que c'est pour maintenant, parce que c'est le comportement attendu, mais il semble que ce n'est pas ce qui se passe. J'ai ajouté quelques cas de test de l'échantillon pour voir si ils peuvent nous aider à expliquer (github question ici).
J'ai mis à jour la réponse, avec des liens vers le nouveau, le code est correct dans l'échantillon.
Désolé d'avoir pris un moment pour répondre à nouveau. La mise à jour de la sécurité de l'échantillon à l'aide GlobalAuthenticationConfigurerAdapter ne fonctionne en effet. Il existe cependant une chose étrange se passe: quand je désactive la gestion de la sécurité par le biais de la gestion.de sécurité.activé=false mais plutôt mettre en place un personnalisé du printemps de sécurité antMatcher [par exemple .antMatchers("/gestion/**").hasRole("ADMIN")] puis sur la gestion des url comme /gestion/mappings sont pas garantis. Il semble que la gestion.de sécurité.activé=false complètement l'emporte sur les autres printemps des paramètres de sécurité.
Oui quand j'utilise
@Order(Ordered.LOWEST_PRECEDENCE - 11)
au lieu de-8
, alors il fonctionne. Il se sent un petit peu de la magie de choisir une valeur à l'aide de-10
s'arrête même de démarrer parce que le @de l'Ordre n'est pas unqiueOriginalL'auteur Dave Syer
Je dirais que, parfois, il est plus facile d'exclure de configuration automatique de Printemps de l'élément de Démarrage et la configuration à partir de zéro si vous avez des cas très spécifiques. Dans ce cas, vous pouvez utiliser:
Ou tout simplement
ManagementWebSecurityConfiguration.java
si vous voulez garder le reste de Démarrage de la configuration de Sécurité. Et puis vous pouvez utiliser quelque chose comme ça:Comme vous pouvez le voir j'ai réutilisé la SecurityProperties dans ce cas, afin d'éviter de faire mon propre.
OriginalL'auteur Przemek Nowak