• 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,能够基于各种数据存储来认证用户。
      


  • 相关阅读:
    高斯模糊原理,算法
    SIFT算法详解
    第五章:状态图
    ANTLR4权威指南
    第八章:包图,组件图,部署图
    棋盘n皇后问题-递归
    普通页面引入React(使用和不使用JSX)
    浏览器环境
    DevTool-Network
    优化浏览器渲染
  • 原文地址:https://www.cnblogs.com/nyatom/p/9057015.html
Copyright © 2020-2023  润新知