SpringSecurity表单认证(一)

配置类

  1. 创建securityConfig,并继承WebSecurityConfigurerAdapter,它是web应用的安全适配器
  2. 重写configure方法,共有三个,重写参数为http的configure方法
  3. 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会跳转到登陆页面;

IMG_256

自定义认证方式就是在过滤器链上增加过滤器,如,短信登陆,微信登陆,qq登陆等.

注意:上面过滤器链上,绿色的部分可以我们通过配置来决定某个过滤器是否生效了。比如上面不配置http.httpBasic()那么Basic Authentication Filter就不会生效。其他过滤器是不能控制的。他们一定会在过滤器链路上,并且其位置也是不能更改的

调试表单认证

  1. rest api断点

IMG_256

  1. FilterSecurityInterceptor拦截器断点

IMG_256

  1. ExceptionTranslationFilter的doFilter断点

IMG_256

  1. UsernamePasswordAuthenticationFilter的attemptAuthentication断点

IMG_256

请求/user(未登陆)

  1. 进入FilterSecurityInterceptor拦截器断点

IMG_256

  1. 进入xceptionTranslationFilter的doFilter,拦截异常(未登陆)

IMG_256

  1. 跳转登录页面,输入用户名/密码,登陆
  2. UsernamePasswordAuthenticationFilter的attemptAuthentication

IMG_256

  1. 认证通过,进入FilterSecurityInterceptor拦截器

IMG_256

6.进入请求接口逻辑

关闭登陆验证

关闭Spring security的登录验证,springboot2.x启动类上排除
@SpringBootApplication(exclude = {SecurityAutoConfiguration.class, ManagementWebSecurityAutoConfiguration.class})

springboot1.0

security:
basic:
enabled: false #关闭登陆.springboot 1.x

posted @ 2024-01-15 15:20  wangzhilei  阅读(34)  评论(0编辑  收藏  举报