Spring Security 过滤器链
绿色的过滤器是我们能配置的,每一个绿色过滤器处理一种认证方法。完成请求之后会做一个请求完成的标记。
SecurityContextPersistenceFilter:请求进来,检查session,如果有SecurityContext拿出来放到线程里,如果没有就过去。请求出去,检查线程,如果有SecurityContext就拿出来放到session里。这样就能共享用户认证结果。
UsernamePasswordAuthenticationFilter:处理基于表单的。
BasicAuthenticationFilter:处理HTTP Basic的。
......
ExceptionTranslationFilter:接收异常,引导用户到最初的认证页面
FilterSecurityInterceptor:决定当前请求能不能通过,然后访问REST API,根据我们的配置判断通过不通过,不能通过的根据不能通过的的原因抛出不同的异常,由ExceptionTranslationFilter接收。
简单示例
用户名:默认user
密 码:Spring boot启动之后控制台上
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
// http.httpBasic() // 最开始的默认登录方式
http.formLogin()
.and()
.authorizeRequests() // 对请求做授权:下面的都是做授权的配置
.anyRequest() // 任何请求
.authenticated(); // 都需要身份认证
}
}
禁用Spring Security
spring boot 1.x:
security.basic.enabled=false
spring boot 2.x:
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication(exclude = {org.springframework.boot.autoconfigure.security.servlet.SecurityAutoConfiguration.class})
public class SpringSecurityLearningApplication {
public static void main(String[] args) {
SpringApplication.run(SpringSecurityLearningApplication.class, args);
}
}