SpringSecurity表单认证(一)
配置类
- 创建securityConfig,并继承WebSecurityConfigurerAdapter,它是web应用的安全适配器
- 重写configure方法,共有三个,重写参数为http的configure方法
- configure(HttpSecurity http)方法,配置表单登陆认证方法,任何请求都需要表单认证
@Override protected void configure(HttpSecurity http) throws Exception { //http.formLogin() //表单登陆认证方式,浏览器跳转到specurity默认登陆页面 http.httpBasic()//浏览器弹出登陆对话框登陆认证方式 .and() .authorizeRequests() //设置请求符合访问资源的权限 .anyRequest().authenticated(); //对任何请求都要登陆认证后才能访问 }
基本原理
- springSecurity过滤器链(认证过滤器),认证方式有很多种(过滤器),最后有FilterSecurityInterceptor拦截器决定是否可以访问资源,决定的依据是由配置类的configure方法决定。
- 其中设置主要有两部分:1.设置认证方式(过滤器);2.设置请求符合访问资源的权限;
- 任何一个过滤器认证了一个请求之后,会给这个请求做一个标记,表明这个请求认证成功了,下面过滤器放行即可
- 如果请求符合配置的条件,则访问资源,否则FilterSecurityInterceptor会抛出不同的异常;
- ExceptionTranslationFilter会接收FilterSecurityInterceptor抛出的异常做相应的处理;比如,使用formLogin认证方式,如果没有登陆,ExceptionTranslationFilter会跳转到登陆页面;
自定义认证方式就是在过滤器链上增加过滤器,如,短信登陆,微信登陆,qq登陆等.
注意:上面过滤器链上,绿色的部分可以我们通过配置来决定某个过滤器是否生效了。比如上面不配置http.httpBasic()那么Basic Authentication Filter就不会生效。其他过滤器是不能控制的。他们一定会在过滤器链路上,并且其位置也是不能更改的
调试表单认证
- rest api断点
- FilterSecurityInterceptor拦截器断点
- ExceptionTranslationFilter的doFilter断点
- UsernamePasswordAuthenticationFilter的attemptAuthentication断点
请求/user(未登陆)
- 进入FilterSecurityInterceptor拦截器断点
- 进入xceptionTranslationFilter的doFilter,拦截异常(未登陆)
- 跳转登录页面,输入用户名/密码,登陆
- UsernamePasswordAuthenticationFilter的attemptAuthentication
- 认证通过,进入FilterSecurityInterceptor拦截器
6.进入请求接口逻辑
关闭登陆验证
关闭Spring security的登录验证,springboot2.x启动类上排除
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})
springboot1.0
security:
basic:
enabled: false #关闭登陆.springboot 1.x