• 第9章 保护Web应用



    大多数情况下安全性都是一个超越了应用程序的横切关注点。Spring Security是一种基于 Spring AOP 和 Servlet 规范中的 Filter 实现的安全框架。
    Spring Security 是为基于 Spring 的应用程序提供声明式安全保护的安全性框架。 Spring Security 提供了完整的安全性解决方案,它能够在 Web 请
    求级别和方法调用级别处理身份认证和授权。因为基于 Spring 框架,所以 Spring Security 充分利用了依赖注入( dependency injection , DI )和
    面向切面的技术。
    1、使用Spring Security模块添加到类路径下,Spring Security 3.2 分为 11 个模块。
    模  块 描  述
    ACL 支持通过访问控制列表( access control list , ACL )为域对象提供安全性
    切面( Aspects ) 一个很小的模块,当使用 Spring Security 注解时,会使用基于 AspectJ 的切面,而不是使用标准的 Spring AOP
    CAS 客户端( CAS Client ) 提供与 Jasig 的中心认证服务( Central Authentication Service , CAS )进行集成的功能
    配置( Configuration ) 包含通过 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 安全性支持

    如果要使用Spring Security,必须引入Configuration和Core两个模块。如果是web项目需要引入Web模块,如果使用了jsp需要引入标签库。
    2、过滤Web请求
    Spring Security通过多个Servlet Filter实现的安全性。我们只需要在web.xml或者WebApplicationInitialize中配置一个filter即可。
    DelegatingFilterProxy会将工作委托给一个注册在上下文中的Bean中。
    在web.xml中配置
    <!--DelegatingFilterProxy会将过滤逻辑委托给名为springSecurityFilterChain的Filter Bean-->
    <filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>
    org.springframework.web.filter.DelegatingFilterProxy
    </filter-calss>
    </filter>
    在WebApplicationInitializer中以java的方法配置
    /**
    AbstractSecurityWebApplicationInitializer实现了WebApplicationInitializer,Spring会发现他并且注册DelegatingFilterProxy。
    我们可以重载appendFilters() 或 insertFilters()方法自己添加别的Filter,但是DelegatingFilterProxy的注册我们什么也不用做。
    */
    public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer{}
    注意:无论使用哪种配置方式,他们都会连接发往应用的请求,并将讲求委托给ID为springSecurityFilterChain的Bean。
    SpringSecurityFilterChain是一个特殊的Filter它连接了其他的Filter(各有各的作用)。这些Filter会在启用安全的时候会启用。
    3、编写简单的安全配置
    Spring Security 在早期版本中配置非常繁琐。Spring Security2.0之后简单了一些。Spring3.0引入了java的配置方案。下面是使用java最简单的配置
    /**
    Spring中任何实现了WebSecurityConfigurer的类都可以作为Spring Security的配置配。但是下面这种方法是最简单的。
    @EnableWebSecurity可以启动web安全性。
    但是如果使用的是SpringMVC那么你需要使用@EnableWebMvcSecurity注解。该注解还配置了Spring MVC的参数解析器
    这两种方法都会造成应用的锁定,导致任何人不能访问系统。
    */
    @configuration
    @EnableWebSecurity //启用Web安全性
    public class SecurityConfig extends WebSecurityConfigurerAdapter{}
    指定Web安全的细节
    通过重载WebSecurityConfigurerAdapter中的configure方法实现:
    方  法 描  述
    configure(WebSecurity) 通过重载,配置 Spring Security 的 Filter 链
    configure(HttpSecurity) 通过重载,配置如何通过拦截器保护请求
    configure(AuthenticationManagerBuilder) 通过重载,配置 user-detail 服务

    /**
    下面配置指点了保护http请求的方案,和客户端认证用户的方案。
    通过调用authorizeRequests()和anyRequest().authenticated()就会要求所有进入应用的Http请求都需要认证。
    但是没有重写configure(AuthenticationManagerBuilder)方法,导致没有用户可以认证。
    */
    protected void configure(HttpSecurity http) throws Exception{
    http.authorizeRequests().anyRequest().authenticated().add().formLogin().and().httpBasic();
    }
    为了满足我们的要求需要:
    1:配置用户存储
    2:指定那些请求需要认证,那些不需要认证,以及需要的权限。
    3:提供一个自定义的登录界面,替代原来简单的默认登录页。
    ????????????????????????????????????????????????????????????????
    后续内容待续。。。

  • 相关阅读:
    51nod 1380 夹克老爷的逢三抽一 堆 脑洞题
    洛谷P2168 荷马史诗 堆 哈夫曼树
    HDU 4343 Interval query 倍增思想, DP
    洛谷P1969 积木大赛 贪心 差分
    codves1052 地鼠游戏 贪心
    hdu6031 Innumerable Ancestors
    Codeforces 278C Learning Languages(并查集) 求连通块
    [LeetCode]80. Remove Duplicates from Sorted Array II删除数组中的重复值
    [LeetCode]86. Partition List分离链表
    [LeetCode]42. Trapping Rain Water雨水填坑
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8941876.html
Copyright © 2020-2023  润新知