• 【Spring Security 系列】(六)入门案例中各组件的实现类


    前面几篇文章介绍了 Spring Security 中的各种功能组件,本文将结合 【Spring Security 系列】(一)入门篇 中的实际案例来介绍这些功能组件的默认实现,以及它们是如何通过配置作用到整个流程的。

    通过了解组件的配置,可以让我们知道如何自定义整个流程中的各个环节。

    组件的默认实现

    • UserDetailsService(用户信息查询):InMemoryUserDetailsManager:存储在内存的用户数据,默认内置一个帐号user,可以通过 spring.security.user 配置设置默认帐号密码。

    • UserDetails(用户信息):User

    • GrantedAuthority(权限信息):SimpleGrantedAuthority

    • PasswordEncoder(密码加密与验证):DelegatingPasswordEncoder

    • 登录接口:UsernamePasswordAuthenticationFilter:POST /login

    • AuthenticationSuccessHandler(认证成功处理器):SavedRequestAwareAuthenticationSuccessHandler:默认重定向到首页 /,如果是因为访问其他路径异常导致重定向到登录页的,登录成功后会重定向到原来的路径。

      • AuthenticationFailureHandler(认证失败处理器):SimpleUrlAuthenticationFailureHandler:重定向到 /login?error
    • 登出接口:LogoutFilter:POST /logout

      • 登出成功处理:SimpleUrlLogoutSuccessHandler:重定向到 /login?logout
    • 异常处理:ExceptionTranslationFilter

      • 没权限:AccessDeniedHandlerImpl:返回403
      • 没登录:LoginUrlAuthenticationEntryPoint:重定向到 /login
    • 鉴权拦截器:FilterSecurityInterceptor

    • CSRF安全:CsrfFilter

    • 登录页:DefaultLoginPageGeneratingFilter:GET /login

    • 登出页:DefaultLogoutPageGeneratingFilter:GET /logout

    配置

    Spring Security 的核心配置类就是 WebSecurityConfigurerAdapter,但是我们在案例中并没有用到此类。这要归功于 SpringBoot 的自动配置。实际上是 SpringBootWebSecurityConfiguration 创建了 WebSecurityConfigurerAdapter 的 Bean,而此配置类则是通过 SecurityAutoConfiguration 使用 @Import 导入容器的。而SecurityAutoConfiguration 则是通过 SpringBoot 自动配置引入容器的。整体的关系表现为:
    SpringBoot SPI -> SecurityAutoConfiguration -> SpringBootWebSecurityConfiguration -> WebSecurityConfigurerAdapter

    WebSecurityConfigurerAdapter 中使用到了一个很重要的类 HttpSecurity,这个类是过滤器链 DefaultSecurityFilterChain 的构建类。DefaultSecurityFilterChain 其中包含了一系列的 Filtrer,Filter 才是核心。(比如上面的 UsernamePasswordAuthenticationFilter、LogoutFilter…)

    WebSecurityConfigurerAdapter 中其实内置了默认的配置,这就使得我们的案例在不做任何配置的时候,还能正常运转(虽然只是demo级别)。默认配置体现在它的 getHttp()configure(HttpSecurity http)方法中,比如 http.formLogin() 支持表单登录,也就是 UsernamePasswordAuthenticationFilter;比如 http.logout() 支持登出,也就是 LogoutFilter 等等。

    自定义配置的方式也就是继承 WebSecurityConfigurerAdapter,示例:

    @Configuration
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    
        @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().and()
                    .httpBasic();
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    end

  • 相关阅读:
    uniapp小程序单页面改变手机电量,头部通知的颜色效果demo(整理)
    Oracle SQL执行计划操作(3)——物化视图相关操作
    Mongo的数据操作
    探析共享股东模式:创新的商业模式引领共享经济发展
    easyexcel结合jdbc手动控制事务加批处理实现百万数据导入
    常见的攻击方式以及防护策略
    5. 最长回文子串
    各大公司Java后端开发面试题总结
    10. SAP ABAP OData 服务如何支持修改(Update)操作
    企业怎么管理自己固定资产的
  • 原文地址:https://blog.csdn.net/qq_31772441/article/details/126294833