hello web security java configuration
第一步创建 Spring Security Java 配置文件。
这个配置创建一个 springSecurityFilterChain 过滤器负责所有安全。
(保护URLs,验证用户名和密码,重定向表单提交)
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation
.authentication.builders.*;
import org.springframework.security.config.annotation
.web.configuration.*;
@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {
@Bean
public UserDetailsService userDetailsService()
throws Exception {
InMemoryUserDetailsManager manager = new
InMemoryUserDetailsManager();
manager.createUser(User.withUsername("user")
.password("password").roles("USER").build());
return manager;
}
}
1.1 AbstractSecurityWebApplicationInitializer
下一个步骤注册 springSecurityFilterChain.
这个可以在 spring’s WebApplicationInitializer 的 java 配置的完成 在Servlet 3.0环境中。
spring Security 提供 AbstractSecurityWebApplicationInitializer 确保 springSecurityFilterChain 被注册.
1.2 AbstractSecurityWebApplicationInitializer without Existing Spring
如果没有使用 spring or spring mvc.
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
public SecurityWebApplicationInitializer() {
super(WebSecurityConfig.class);
}
}
SecurityWebApplicationInitializer 会做的事:
1) 位每个 URLs 注册 springSecurityFilterChain filter
2) 添加 ContextLoaderListener 加载 WebSecurityConfig
1.3 AbstractSecurityWebApplicationInitializer with Spring MVC
如果用 spring,可能已经有 WebApplicationInitializer 加载 spring 配置。
如果用之前的配置会报错。我们应该注册 spring security 到当前的 ApplicationContext.
如果使用 SPring MVC 我们的 SecurityWebApplicationInitializer 如下:
import org.springframework.security.web.context.*;
public class SecurityWebApplicationInitializer
extends AbstractSecurityWebApplicationInitializer {
}
这个只是为每个 URL 注册 springSecurityFilterChain filter.之后要确保 WebSecurityConfig 加载到
现有的 appicationInitilizer.
如果用的是 spring MVC 应该添加到 getRootConfigClasses():
public class MvcWebApplicationInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { WebSecurityConfig.class };
}
// ... other overrides ...
}