La configuration de la Sécurité Printemps avec Spring Boot
Je suis de nouveau à la configuration de Printemps de Sécurité à l'aide de Java Config. J'essayais de suivre cette publication. Cependant, lorsque je lance mon application, j'obtiens un Basic Auth défi sur toutes les Url, y compris /
. Entrant dans le cadre de l'identifiant/pass combos ci-dessous ne semblent pas fonctionner.
Mon Contrôleur:
package com.xxx.web;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/")
/**
* Controller to handle basic "root" URLs
*
* @author xxx
* @version 0.1.0
*/
public class RootController {
/**
* Handles '/'
* @param model
* @return
*/
@RequestMapping
public String index(Model model) {
return "index";
}
/**
* Handles '/signup'
* @param model
* @return
*/
@RequestMapping("/signup")
public String signup(Model model) {
return "signup";
}
/**
* Handles '/about'
* @param model
* @return
*/
@RequestMapping("/about")
public String about(Model model) {
return "about";
}
/**
* Handles '/login'
* @param model
* @return
*/
@RequestMapping("/login")
public String login(Model model) {
return "login";
}
/**
* Handles '/admin'
* @param model
* @return
*/
@RequestMapping("/admin")
public String admin(Model model) {
return "admin";
}
}
Pas sûr de ce que d'autre à essayer. Juste à la recherche de quelques conseils pour expliquer pourquoi cela ne fonctionne pas.
Mise à jour
Pour être complet, voici la config de la classe:
package com.xxx.config;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.builders.WebSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
@EnableWebSecurity
/**
* Configures the security for the application
*
* @author XXX
* @version 0.1.0
*
*/
public class WebSecurityAppConfig extends WebSecurityConfigurerAdapter {
@Override
/**
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#registerAuthentication(AuthenticationManagerBuilder)
*/
protected void registerAuthentication(AuthenticationManagerBuilder auth)
throws Exception {
auth
.inMemoryAuthentication()
.withUser("user") //#1
.password("password")
.roles("USER")
.and()
.withUser("admin") //#2
.password("password")
.roles("ADMIN","USER");
}
@Override
/**
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(WebSecurity)
*/
public void configure(WebSecurity web) throws Exception {
web
.ignoring()
.antMatchers("/resources/**"); //#3
}
@Override
/**
* @see org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter#configure(HttpSecurity)
*/
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/","/signup","/about").permitAll() //#4
.antMatchers("/admin/**").hasRole("ADMIN") //#6
.anyRequest().authenticated() //7
.and()
.formLogin() //#8
.loginPage("/login") //#9
.permitAll(); //#5
}
}
Et la WebApplicationInitializer:
package com.xxx.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
/**
*
* @author XXX
* @version 0.1.0
*/
public class SpringWebMvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
/**
*
*/
protected Class<?>[] getRootConfigClasses() {
return new Class[] { WebSecurityAppConfig.class };
}
@Override
/**
*
*/
protected Class<?>[] getServletConfigClasses() {
return null;
}
@Override
/**
*
*/
protected String[] getServletMappings() {
return null;
}
}
Je ne comprend pas ces avant parce qu'ils sont un peu un copier-coller à partir de la référencées blogue.
Ma compréhension avec Spring Boot est que vous mettez l'Actionneur pour la Sécurité, puis ajouter les Printemps Java les classes de configuration en place. Je suis mal dans cette hypothèse? La seule soluce que j'ai trouvé pour le Printemps de Démarrage avec le Printemps de Sécurité ne pas utiliser un Contrôleur, et j'ai essayé de copier ce qu'il était en train de faire d'aussi près que je le pouvais.
Votre compréhension est correcte. Il y a deux échantillons (spring-boot-échantillon-secure, qui est plutôt neuf, et spring-boot-échantillon de l'actionneur, ce qui est plus âgé) que l'utilisation de Ressort de Sécurité. Le "secure" est probablement le plus proche de votre cas d'utilisation.
(Je n'ai toujours pas voir le Printemps de Démarrage de n'importe où dans le code que vous avez posté. Je ne serais pas à l'aide de
AbstractAnnotationConfigDispatcherServletInitializer
par exemple, si j'étais vous - essayez SpringBootServletInitializer
).Merci pour l'entrée. Va voir les autres échantillons lorsque je rentre à la maison. Je suis probablement à la recherche à un ancien repo GIT. Aussi, passer à la
SpringBootServletInitializer
. J'espère que ça me fait passé mon bloc de route.
OriginalL'auteur CodeChimp | 2013-10-23
Vous devez vous connecter pour publier un commentaire.
La question d'origine est probablement la meilleure façon de répondre simplement en décrivant les options disponibles. Certaines applications (les services qui ont seulement besoin d'une authentification HTTP basique) peuvent utiliser les paramètres par défaut de l'actionneur, d'autres auront besoin de spécifier
security.*
propriétés (voirSecurityProperties
pour les options) et/ou unAuthenticationManager
(pour les détails du compte utilisateur). Le prochain niveau de contrôle provient de l'ajout de votre propreWebSecurityConfigurerAdapter
, et vous pouvez voir comment le faire en regardant le "sécurisé" dans le Printemps de Démarrage.J'ai trouvé que mon problème est causé par le stackoverflow.com/questions/26636465/...
OriginalL'auteur Dave Syer