当前位置: 首页 > news >正文

东北做美甲的贷款在线播放英文网站全网营销一站式推广

东北做美甲的贷款在线播放英文网站,全网营销一站式推广,做模板网站的利与弊,网站服务器放置地怎么填写1、基本概念 Spring Security 是一个强大且高度可定制的框架,用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分,提供了全面的安全解决方案,包括认证、授权、CSRF防护、会话管理等功能。 2、认证、授权和鉴权 (1&am…

1、基本概念

Spring Security 是一个强大且高度可定制的框架,用于构建安全的 Java 应用程序。它是 Spring 生态系统的一部分,提供了全面的安全解决方案,包括认证、授权、CSRF防护、会话管理等功能。

2、认证、授权和鉴权

(1)、认证

认证是判断一个用户的身份是否合法的过程。用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登录,二维码登录,手机短信登录,指纹认证等方式。

(2)、授权

授权是对系统中的用户赋予资源访问权限的过程,通常分为菜单权限,静态资源权限,接口权限等。

(3)、鉴权

授权是用户认证通过后,根据用户的权限来控制用户访问资源的过程,拥有资源的访问权限则正常访问,没有权限则拒绝访问。

3、实现原理

SpringSecurity通过实现一组过滤器来完成安全工作。这些过滤器按顺序处理请求。每个过滤器负责特定的安全任务。这里先简单阐述下主要工作流程,过滤器链在后面会详细描述。

(1)、经典web请求过滤器链

当客户端向服务端发起请求后,容器根据请求 URI 的路径和过滤器相关配置自动创建一个 FilterChain,其中包含过滤器实例和处理 HttpServletRequest 的 Servlet。类似如下图:
在这里插入图片描述
当过滤器执行放行后,才会进入到下一个过滤器中,所以调用每个 Filter 的顺序非常重要。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {// 进入servelt前,执行chain.doFilter(request, response); // 执行完servlet后,返回客户端时执行
}

(2)、spring加入过滤器链

当我们使用spring框架时,通过spring也可以加入自定义过滤器,那么spring是怎么做的呢?
答案是:
Spring 提供了一个名为 DelegatingFilterProxy 的过滤器代理类添加到了web请求的过滤器链中(DelegatingFilterProxy 就是一个过滤器)。在这个过滤器中spring做了以下事情:
1、获取到了自身spring容器内的所有Filter的实例(自定义的Filter也是作为Bean被spring容器管理)
2、依次执行了这些过滤器,直到全部执行完成后才放行到web过滤器链中的下一个过滤器或servlet中,这样spring自身的过滤器就都生效了。
在这里插入图片描述
DelegatingFilterProxy 代码示例如下:

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {// 获取spring容器的所有过滤器BeanFilter delegate = getFilterBean(someBeanName);// 执行过滤器Beandelegate.doFilter(request, response);
}

(3)、springSecurity加入过滤器链

上面我们说了spring通过DelegatingFilterProxy代理过滤器成功加入到web过滤器链中。
springSecurity作为spring家族的一员,自身封装了一组过滤器链的实例(用于认证和授权)。
在DelegatingFilterProxy有一个属性Bean叫FilterChainProxy ,FilterChainProxy 是 Spring Security 提供的一个特殊过滤器,它允许通过 SecurityFilterChain 向多个过滤器实例委托。
在这里插入图片描述
FilterChainProxy在DelegatingFilterProxy中封装获取。看下DelegatingFilterProxy源码,如下所示,这里的delegate实际上就是FilterChainProxy对象,

public class DelegatingFilterProxy extends GenericFilterBean {@Nullableprivate String contextAttribute;@Nullableprivate WebApplicationContext webApplicationContext;@Nullableprivate String targetBeanName;private boolean targetFilterLifecycle;@Nullableprivate volatile Filter delegate;  // FilterChainProxy就在这里private final Object delegateMonitor;//省略...
}

再看下FilterChainProxy 源码,发现其中就包含一组过滤器链SecurityFilterChain对象。就是这里,springSecurityFilterChain就上场了。

public class FilterChainProxy extends GenericFilterBean {private static final Log logger = LogFactory.getLog(FilterChainProxy.class);private final static String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED");private List<SecurityFilterChain> filterChains;    // SecurityFilterChain 对象列表//省略...
}

在这里插入图片描述
FilterChainProxy 中List 来确定应该为当前请求调用哪一个 SpringSecurityFilterChain 实例。在选择过滤器链时,在FilterChainProxy 中是这样做的:
逻辑:
1、SecurityFilterChain(接口) -> DefaultSecurityFilterChain(实现类),里面有一个getFilters方法,这里就会根据请求返回了一组过滤器 。
2、RequestMatcher接口用来支持匹配HttpServletRequest的策略。匹配策略有很多,此处不多介绍。
3、RequestMatcher -> AntPathRequestMatcher(实现),servlet通过url路径进行匹配 。

private List<Filter> getFilters(HttpServletRequest request) {for (SecurityFilterChain chain : filterChains) {if (chain.matches(request)) {   // 根据请求类型选择出不同过滤器链return chain.getFilters();}}return null;}

(4)、异常处理机制

概述:
SpringSecurity的过滤器链中,有一个ExceptionTranslationFilter,这个过滤器会捕获所有与安全相关的异常,并根据异常类型进行相应的处理。常见的安全异常包括:
AuthenticationException:表示认证失败。
AccessDeniedException:表示授权失败,即用户没有权限访问某个资源。
如果是AuthenticationException:
第一步:首先清除 SecurityContextHolder,这个是一个 Spring Security 中的一个核心类。
第二步:RequestCache:保存 HttpServletRequest 请求,在身份验证成功后可以使用它重复原始请求。//也可以不保存,那么用户就需要重新去请求
第三步、AuthenticationEntryPoint 用于从客户端获取请求凭据。// 它可能重定向到登录页面或发送 WWW-Authenticate 报文头。
如果是AccessDeniedException
则拒绝访问。直接调用 AccessDeniedHandler 来处理拒绝访问。// AccessDeniedHandler(接口),也可以自定义处理策略
在这里插入图片描述
这里看下ExceptionTranslationFilter的伪代码如下:
如果没有发生任何异常,ExceptionTranslationFilter过滤器直接放行到之后的过滤器;如果发生了安全异常,会根据异常类型走不同的方法,如认证异常(一般重新跳转登录页);如果是权限异常(提示相关的拒绝信息)

try {filterChain.doFilter(request, response);
} catch (AccessDeniedException | AuthenticationException ex) { //捕获特定异常if (!authenticated || ex instanceof AuthenticationException) {startAuthentication(); //启动认证流程} else {accessDenied(); //决绝策略}
}

(5)、原理总结

1、spring通过将DelegatingFilterProxy过滤器链加入到web请求过滤器链中。
2、DelegatingFilterProxy中封装了FilterChainProxy过滤器对象(springSecurity入口)
3、FilterChainProxy中封装了List过滤器链对象。
4、List初始过程会调用getFilters方法获取到目标过滤器链(策略是根据Request对象的URL)
5、之后会遍历执行List过滤器链,执行里面的每一个过滤器,完成认证或授权等过程。
6、如果出现安全异常,ExceptionTranslationFilter中会根据异常的类型走对应的异常处理方法。
在这里插入图片描述

学海无涯苦作舟!!!

http://www.hkea.cn/news/271023/

相关文章:

  • 设计类的网站和简介关键词优化推广排名多少钱
  • 代理记账网站怎么做北京seo方法
  • cdr做网站企业网站建设的基本流程
  • 网站建设需要哪些硬件百度指数排名
  • 2017年网站开发用什么语言找培训机构的app
  • 澳门响应式网站建设seo入门黑帽培训教程
  • 有哪些网站可以做微商口碑营销案例2021
  • 百度推广要不要建网站网络平台建设及运营方案
  • 大型网站开发考试查网址
  • 网站建设业务市场营销论文搜索优化
  • 黄页88企业名录seo怎么优化武汉厂商
  • 触摸屏网站如何做泰州seo网络公司
  • 银川app购物网站制作公司搜狗收录入口
  • 做单页网站要多少钱wordpress免费网站
  • 网站建设性价比高优化设计官网
  • 电脑手机网站相互跳转西安seo关键词排名优化
  • 一般做网站用什么字体比较合适搜索引擎营销是什么
  • 去什么网站发贴做推广seo及网络推广招聘
  • 如何批量建站什么是互联网营销
  • 哈尔滨网站建设如何搭建一个网站平台
  • 哪些网站可以做任务网络营销推广的基本手段
  • 互联网舆情报告什么是seo营销
  • 餐饮商家做网站的好处沈阳关键词优化费用
  • 如何把网站的文字编辑网站页面优化内容包括哪些
  • 安徽做公司网站哪家好销售策略和营销策略
  • 做游戏都需要什么网站吗域名注册腾讯云
  • 北京建设厅网站谷歌关键词搜索
  • 如何识别一个网站是否做的好谷歌关键词挖掘工具
  • 网站建设专家网店营销推广
  • 做试玩网站搜索引擎优化答案