Spring Security 学习总结(2)

从一个最简单的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();
}

如上的配置包括:

  • 要求任意请求都需要鉴权(authenticate)

  • 允许user通过登陆表单进行鉴权(authenticate)

  • 允许用户通过基本的HTTP 认证进行鉴权(authenticate)

这个java configuration 其实是和XML 配置是一致的:

<http use‐expressions="true">
    <intercept‐url pattern="/**" access="authenticated"/>
    <form‐login />
    <http‐basic />
</http>

.and() 等价于 xml tag 的关闭标签:  />

说明:对于一个表单登陆的请求,需要如下配置:

http.formLogin().loginPage("/login").permitAll();


你可能感兴趣的:(Spring Security 学习总结(2))