• Spring Security 学习总结


      Spring Security

      Spring Security是基于Spring提供声明式安全保护的安全性框架。Spring Security提供了完整的安全性解决方案,能够在Web请求级别和方法调用级别处理身份认证和授权。

      Spring Security从两个角度来解决安全性问题:

    1. 使用Servlet规范中的Filter保护Web请求并限制URL级别的访问;
    2. 使用Spring AOP保护方法调用——借助于动态代理和使用通知,确保只有具备适当权限的用户才能访问安全保护的方法。

      Spring Security被分为了11个模块:

    模块 描述
    ACL(access control list) 支持通过访问控制列表(ACL)为域对象提供安全性
    切面(Aspects) 当使用Spring Security注解时,会使用基于AspectJ的切面,而非标准的AOP
    CAS(Central Authentication Service)客户端 提供与Jasig的中心认证服务(CAS)进行集成的功能
    配置(Configuratiion)* 包含通过XML和Java配置Spring Security的功能支持
    核心(Core)      * 提供Spring Security基本库
    加密(Cryptography) 提供了加密和密码编码的功能
    LDAP 支持基于LDAP进行认证
    OpenID 支持使用OpenID进行集中式认证
    Remoting 提供了对Spring Remoting的支持
    标签库(Tag Library) Spring Security的JSP标签库
    Web 提供了Spring Security基于Filter的Web安全性支持

      过滤Web请求

      Spring Security基于DelegatingFilterProxy实现其安全性需要的过滤功能。DelegatingFilterProxy是一个特殊的Servlet Filter,主要将工作委托给一个javax.servlet.Filter实现类,实现类将作为一个bean注册在Spring应用的上下文中。

      Java配置方式,配置DelegatingFilterProxy:

    public class SecurityWebInitializer extends 
                     AbstractSecurityWebApplicationInitializer {}    
      AbstractSecurityWebApplicationInitializer 实现了 WebApplicationInitializer ,因此将被Spring容器并注册 DelegatingFilterProxy。实现类可以重载抽象类中的appendFilters()或insertFilters()方法来注册自己选择的Filter,但如果只是注册DelegatingFilterProxy的话,不需要重载任何方法。
    完成配置DelegatingFilterProxy后,它就会拦截发往应用中的请求,并将请求委托给ID为springSecurityFilterChain的Bean。
      springSecurityFilterChain本身是另一个特殊的Filter,也叫 FilterChainProxy。它可以链接任意一个或多个其他的Filter。Spring Security依赖一系列Servlet Filter来提供不同的安全特性。实际开发中,只需要显式声明springSecurityFilterChain以及它所链接的Filter即可。启动Web安全性时将自动创建。    

    简单的安全性配置--基于Java配置
     
    @Configuration
    @EnableWebSecurity // 启用Web安全性
    public class SecurityConfig extends WebSecurityConfigurerAdapter {
    
        /**
         * 简单的默认配置:指定该如何保护HTTP请求
         * @param http
         * @throws Exception
         */
        protected void configure(HttpSecurity http) throws Exception {
            http
                    .authorizeRequests()
                    .anyRequest().authenticated()
                    .and()
                    .formLogin().and()
                    .httpBasic();
        }
    
    }

      @EnableWebSecurity注解将会启用Web安全功能,ps:Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,或者扩展 WebSecurityConfigurerAdapter 。

     具体的Web安全细节,将通过重写WebSecurityConfigurerAdapter 中的一个或多个方法来实现,如其中的三个configure()方法来配置Web安全性,具体通过传递的参数设置行为。
    重写WebSecurityConfigurerAdapter的configure()方法
    方法 描述
    configure(WebSecurity) 通过重写,配置Spring Security的Filter链
    configure(HttpSecurity) 通过重写,配置如何通过拦截器保护请求
    configure(AuthenticationManagerBuilder) 通过重写,配置user-detail服务

    示例代码中进行了简单的默认配置,指定如何保护HTTP请求,以及客户端认证用户的方案。调用authorizeRequests()和anyRequest().authenticated()就会要求所有进入应用的HTTP请求都要进行认证。formLogin()和httpBasic()则配置了对表单登录和HTTP Basic方式的支持。
    注意:因为没有重写configure(AuthenticationManagerBuilder)方法,所以没有用户存储支撑认证过程。进而所有的请求都要认证,且没人可成功登陆。
    后续需要的配置如下:
    1. 配置用户存储
    2. 指定具体需要认证的请求及所需权限
    3. 提供自定义登陆页面
    4. 基于安全限制,设置选择性地在Web视图上显示特定的内容

    user-detail服务 **

      优势:内置了多种常见的用户存储场景,如内存、关系型数据库以及LDAP,能够基于各种数据存储来认证用户。
      


  • 相关阅读:
    进程与线程
    the art of seo(chapter seven)
    the art of seo(chapter six)
    the art of seo(chapter five)
    the art of seo(chapter four)
    the art of seo(chapter three)
    the art of seo(chapter two)
    the art of seo(chapter one)
    Sentinel Cluster流程分析
    Sentinel Core流程分析
  • 原文地址:https://www.cnblogs.com/nyatom/p/9057015.html
Copyright © 2020-2023  润新知