我有一个遗留应用程序,其中添加了Spring Web MVC库以公开新的Rest API。
我正在努力集成spring-security以拦截传入的请求。我已经建立了一个安全配置类
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}
和安全应用程序初始化程序
public class SecurityWebApplicationInitializer extends
AbstractSecurityWebApplicationInitializer {
}
遵循相关指南。
使用调试器,我验证了在初始化我的配置类时已加载。我的问题是我的请求没有按预期被拦截。
答案 0 :(得分:0)
由于您已经在使用Spring MVC,请转到用于初始化应用程序的类。如果您使用的是Java Config,它很可能会扩展AbstractAnnotationConfigDispatcherServletInitializer
。
将您的SecurityConfig
添加到其“根配置类”:
public class MySpringMmvcInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
...
@Override
protected abstract Class<?>[] getRootConfigClasses() {
return new Class[] { ..., SecurityConfig.class};
}
}
答案 1 :(得分:0)
我认为您忘记了@configuration注释,请尝试
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable().authorizeRequests().anyRequest().authenticated().and().httpBasic();
}
}