从一个最简单的Spring Security Java Configuration 看起
@Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { auth .inMemoryAuthentication() .withUser("user").password("password").roles("USER"); } }
configGlobal 这个名字不重要,重要的是在一个注解了 @EnableWebSecurity 或@EnableWebMvcSecurity或
@EnableGlobalMethodSecurity 或 @EnableGlobalAuthentication 的类中配置AuthenticationManagerBuilder。
看起来这段代码没有做很多配置,实际上做了很多:
- 要求对每个url的访问都需要认证
- 产生一个login 表单
- 允许用户user,密码password 以USER的身份登录
- 允许用户登出
- 阻止CSRF 攻击
- 集成Security Header(HTTP Strict Transport Security、X_Content-Type-Options、Cache-Control、X-XSS-Protection、X-Frame-Options )
- 与Servlet API 的方法集成(getRemoteUser()、getUserPrincipal()等等)
谈一谈HttpSecurity
SecurityConfig 包含了怎么对user进行认证。但是Spring Security 怎么知道我们需要对所有的用户进行认证呢?Spring Security 怎么知道我们需要支持基于表格的认证呢?
答案在于Spring Security 的WebSecurityConfigurerAdapter 提供了一默认的配置方法:configure(HttpSecurity http)
protected void configure(HttpSecurity http) throws Exception { http .authorizeRequests() .anyRequest().authenticated() .and() .formLogin() .and() .httpBasic(); }
时间: 2024-10-03 22:21:25