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

武进区建设局网站昆山 网站建设

武进区建设局网站,昆山 网站建设,网页设计做网站首页,海南省住建设厅网站报监的工程Spring Security spring提供的安全框架。主要提供了认证和授权的功能。简单梳理看看。   原理简单说就是Spring Security在基于Servlet应用中,其底层采用了Filter机制实现了对请求的认证,授权和漏洞防御等功能。 DelegatingFilterProxy 我们知道,Filter是Servlet规范里面…Spring Security spring提供的安全框架。主要提供了认证和授权的功能。简单梳理看看。   原理简单说就是Spring Security在基于Servlet应用中,其底层采用了Filter机制实现了对请求的认证,授权和漏洞防御等功能。 DelegatingFilterProxy 我们知道,Filter是Servlet规范里面的东西。基于Servlet规范,我们可以为ServletR勇气注入一些自定义Filters。   但是在Spring应用中,实现了Filter接口的Bean无法被Servlet容器感知到。因此,Spring提供了一个DelegatingFilterProxy代理类,DelegatingFilterProxy实现了Filter,因此它可以被注入到FilterChain中,同时,当请求到来时,它会把请求转发到Spring容器中实现了Filter接口的Bean实体。也就是说,DelegatingFilterProxy桥接了Servlet容器和Spring容器。   默认情况下,DelegatingFilterProxy从Spring容器中获取得到的就是FilterChainProxy实体,而FilterChainProxy也是一个代理类,它最终会将请求转发到SpringSecurity提供的SecurityFilterChain中。   FilterChainProxy就是Spring Security真正的入口起始点。调试代码的时候,可以将断点设置在FilterChainProxy#doFilter就可以追踪SpringSecurity完整调用流程。 FilterChainProxy public class FilterChainProxy extends GenericFilterBean { //FILTER_APPLIED 变量是一个标记,用来标记过滤器是否已经执行过了private static final String FILTER_APPLIED = FilterChainProxy.class.getName().concat(".APPLIED"); //filterChains 是过滤器链,注意,这个是过滤器链,而不是一个个的过滤器private ListSecurityFilterChain filterChains; //filterChainValidator 是 FilterChainProxy 配置完成后的校验方法,默认使用的 NullFilterChainValidator 实际上对应了一个空方法,也就是不做任何校验private FilterChainValidator filterChainValidator = new NullFilterChainValidator();//FilterChain为servlet的过滤器链@Override public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {//为true,表示尚未执行过;false表示,已经标记boolean clearContext = request.getAttribute(FILTER_APPLIED) == null;if (clearContext) {try {request.setAttribute(FILTER_APPLIED, Boolean.TRUE);//执行spring security的过滤器doFilterInternal(request, response, chain);}finally {//清除SecurityContextHolder 中保存的用户信息,同时移除 request 中的标记SecurityContextHolder.clearContext();request.removeAttribute(FILTER_APPLIED);}}else {doFilterInternal(request, response, chain);} }在 doFilter 方法中,正常来说,clearContext 参数每次都是 true,于是每次都先给 request 标记上 FILTER_APPLIED 属性,然后执行 doFilterInternal 方法去走过滤器,执行完毕后,最后在 finally 代码块中清除 SecurityContextHolder 中保存的用户信息,同时移除 request 中的标记。 private void doFilterInternal(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {FirewalledRequest fwRequest = firewall.getFirewalledRequest((HttpServletRequest) request);HttpServletResponse fwResponse = firewall.getFirewalledResponse((HttpServletResponse) response);//根据当前request,从FilterChainProxy中配置的多个过滤器链(可以只有一个),找到和当前相匹配的一个securityFilterChain,并获取filtersListFilter filters = getFilters(fwRequest);if (filters == null || filters.size() == 0) {if (logger.isDebugEnabled()) {logger.debug(UrlUtils.buildRequestUrl(fwRequest)+ (filters == null ? " has no matching filters": " has an empty filter list"));}fwRequest.reset();//如果filters为null,表示当前请求不需要执行security的过滤器链,直接执行servlet上的过滤器链chain.doFilter(fwRequest, fwResponse);return;}//如果需要执行security的过滤器链,首先构造一个虚拟的过滤器链VirtualFilterChain vfc = new VirtualFilterChain(fwRequest, chain, filters);vfc.doFilter(fwRequest, fwResponse); }//request匹配到的过滤器链上的所有filters private ListFilter getFilters(HttpServletRequest request) {for (SecurityFilterChain chain : filterChains) {if (chain.matches(request)) {return chain.getFilters();}}return null; }doFilterInternal 方法就比较重要了: 首先将请求封装为一个 FirewalledRequest 对象,在这个封装的过程中,也会判断请求是否合法。对响应进行封装。调用 getFilters 方法找到过滤器链。该方法就是根据当前的请求,从 filterChains 中找到对应的过滤器链,然后由该过滤器链去处理请求。如果找出来的 filters 为 null,或者集合中没有元素,那就是说明当前请求不需要经过过滤器。直接执行 chain.doFilter ,这个就又回到原生过滤器中去了。那么什么时候会发生这种情况呢?那就是针对项目中的静态资源,如果我们配置了资源放行,如 web.ignoring().antMatchers(“/hello”);,那么当你请求 /hello 接口时就会走到这里来,也就是说这个不经过 Spring Security Filter。如果查
http://www.dnsts.com.cn/news/186022.html

相关文章:

  • 手机网站免费生成app可以赚钱做任务的网站有哪些
  • 手机端网站源码wordpress调用文章标题
  • 网站建设好后为什么要维护厦门网站建设网页设计
  • 用dede做的网站首页google网站收录
  • 最好的dm单网站建设个人如何做购物网站 关于支付接口
  • 北京市建设工程质量监督站网站湖南微信网站营销
  • 免费制作网站wordpress免插件
  • 网站网站游戏怎么做阿里云wordpress菜鸟
  • 中山市智能h5网站建设公司网站访客qq获取
  • 网络课程网站模板手机app开发网站模板
  • 品牌网站建设框架网站建设包括啥
  • 用jq和ajax做能登陆注册的一个网站wordpress后台添加新的文章类别
  • 网站进入贵金属企业网站源码
  • 低价网站制作顺德中小型企业网络拓扑图及配置
  • 百色高端网站建设竞价网络推广培训
  • 淘宝网站可信度状况及建设策略校园网站开发的意义
  • 甘南州合作市住房建设局网站wordpress 插件 浮动小人
  • 网站建设销售话术900句牛企网络
  • 做外贸需要到外汇管理网站广汉市建设局官方网站
  • 网站建设招标办法宁波网站建设哪家强
  • 网站开发前端制作html国庆节网页制作代码
  • 网站网站怎么搭建省建设干部培训中心网站
  • 黑龙江省建设集团有限公司网站首页2024房地产最新消息
  • php做的网站模版网络优化器
  • 如何做商业推广网站网站建设课程设计实验报告
  • 网站屏蔽收录网站推广人员怎么算业绩
  • 班级同学录网站建设58同城泰安二手房出售信息
  • 郑州网站建设方案太原app制作
  • 做棋牌网站违法吗盐城网站建设多少钱
  • 甘肃网站建设方案服务至上优质的网站建设公司