springsecurity(一)

spring security

Spring Security是一个功能强大且高度可定制的身份验证和访问控制框架。它是用于保护基于Spring的应用程序的事实上的标准。
提供了完整的安全性解决方案,能够在web请求级别(servlet)和方法调用级别(spring AOP)处理身份证验证和授权。
springsecurity手册:https://www.springcloud.cc/spring-security-zhcn.html

核心功能

认证 (你是谁)
授权 (你能干什么)
攻击防护 (防止伪造身份)

其核心就是一组过滤器链,项目启动后将会自动配置。最核心的就是 Basic Authentication Filter 用来认证用户的身份,一个在spring security中一种过滤器处理一种认证方式。

原理

Spring Security是Java web的一个认证(Authentication)/授权(Authorisation)框架,基于Servlet的Filter技术。

  • servelet

    Servlet技术是Java web开发的底层使能性技术,Struts的
    ActionServlet和Spring MVC的DispatcherServlet等web开发框架
    都是建立在servlet基础之上的。servlet是web请求的基本单元,
    filter围绕着servlet,用于在web请求被处理之前或之后对web请
    求(Request)和应答(Response)修改。参考图见:
    https://www.jianshu.com/p/a41a8f09b811
    

要使Spring Security生效,需要有一个Spring Security的Filter能够被Servlet容器(比如Tomcat、Jetty等)感知到,这个Filter便是DelegatingFilterProxy,该Filter不受Spring IoC容器的管理,也不是Spring Security引入的,而是Spring Framework中的一个通用的Filter。在Servlet容器眼中,DelegatingFilterProxy只是一个Filter而已,跟其他的Servlet Filter没什么区别。
DelegatingFilterProxy本身不在IoC容器中,它却能够访问到IoC容器中的其他对象。

  • 注意:

    Spring Boot会自动将实现了javax.servlet.Filter的Filter自动注册进Servelt容器
    此时可以通过以下方式来禁止自动注册:

     @Bean(name = "authenticationFilterRegistration")
     public FilterRegistrationBean myAuthenticationFilterRegistration(final MyAuthenticationFilter filter) {
      final FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
      filterRegistrationBean.setFilter(filter);
      filterRegistrationBean.setEnabled(false);
      return filterRegistrationBean;
    }
    

DelegatingFilterProxy只是起代理作用,将真正的逻辑代理给其他的被Spring IoC容器管理的对象。
DelegatingFilterProxy会将名字springSecurityFilterChain赋值给targetBeanName字段,然后从IoC容器中找到名字为targetBeanName值(此时也springSecurityFilterChain)的bean,并将逻辑代理给该bean。
Spring Security默认会自动创建名字为springSecurityFilterChain的bean,该Bean为一个FilterChainProxy类型的对象,该对象其实也只是起代理作用
FilterChainProxy维护了多个SecurityFilterChain,每一个SecurityFilterChain只会对特定的Request起作用(比如特定的URL),FilterChainProxy在接收到Request时,会从SecurityFilterChain列表中选出能够处理该Request的那个SecurityFilterChain对象,然后将逻辑代理给该对象。
SecurityFilterChain其实也不是最终完成Spring Security认证逻辑的对象,而是维护了多个Filter bean,这些Filter bean才是真正处理认证逻辑的对象。
有些Filter bean在Spring Security中是必须的,Spring Security会自动为我们创建并配置这些bean,比如用于鉴权的FilterSecurityInterceptor,另外,我们也可以将自己的Filter bean加入Filter bean列表中,比如完成基于Token的认证机制。

  • 关键filter

    ChannelProcessingFilter-用于将HTTP请求重定向到HTTPS页面
    SecurityContextPersistenceFilter-保存用户的登录状态
    UsernamePasswordAuthenticationFilter-用于处理基于Form登录的认证,认证成功重定向到指定页面,认证失败向用户重新返回登录界面并提示错误。
    UsernamePasswordAuthenticationFilter继承自AbstractAuthenticationProcessingFilter
    AbstractAuthenticationProcessingFilter并不完成认证逻辑,而是将其交给AuthenticationManager,
    AuthenticationManager进而代理给AuthenticationProvider,
    AuthenticationProvider验证用户提供的凭证是否正确
    ExceptionTranslationFilter和FilterSecurityInterceptor-这两个Filter通常是结合在一起用的,前者负责处理后者所抛出的异常并做相应的处理,后者主要用于鉴权。
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值