zoukankan      html  css  js  c++  java
  • 第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:提供一个自定义的登录界面,替代原来简单的默认登录页。
    ????????????????????????????????????????????????????????????????
    后续内容待续。。。

  • 相关阅读:
    [建议]我对博客园的发展的一点想法
    [转载] 理想、激情、生存—— 一位技术管理人员的20年工作经历和感悟
    FIT FOR .NET(3)
    基于真实项目的TDD应用
    [团队公告]博客园的敏捷软件开发团队成立了
    .NET数据访问体系结构指南
    这是不是微软MSN的一个Bug呢?
    抽象工厂的应用
    简单基础的问题,但是非常容易出错.
    VS 2005 Beta2 Team Suite Edtion
  • 原文地址:https://www.cnblogs.com/Xmingzi/p/8941876.html
Copyright © 2011-2022 走看看