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

凡科建站网站怎么保存发给别人短视频营销常用平台有

凡科建站网站怎么保存发给别人,短视频营销常用平台有,河南网站推广优化,北京官网开发目录 1、第一阶段:启动服务,构建类的功能2、第二阶段:正式请求 1、第一阶段:启动服务,构建类的功能 查看 Shiro 配置类 ShiroConfiguration: Configuration public class ShiroConfiguration {// 创建 sh…

目录

  • 1、第一阶段:启动服务,构建类的功能
  • 2、第二阶段:正式请求

1、第一阶段:启动服务,构建类的功能

查看 Shiro 配置类 ShiroConfiguration

@Configuration
public class ShiroConfiguration {// 创建 shiroFilter,负责拦截所有请求@Beanpublic ShiroFilterFactoryBean getShiroFilterFactoryBean(DefaultWebSecurityManager defaultWebSecurityManager){ShiroFilterFactoryBean shiroFilterFactoryBean = new ShiroFilterFactoryBean();//给filter设置安全管理器shiroFilterFactoryBean.setSecurityManager(defaultWebSecurityManager);//配置系统受限资源//配置系统公共资源Map<String,String> map = new HashMap<>();// authc 请求这个资源需要认证和授权map.put("/login", "anon");map.put("/register", "anon");map.put("/user/register", "anon");map.put("/user/login", "anon");map.put("/index", "authc");//默认认证界面路径shiroFilterFactoryBean.setLoginUrl("/login");shiroFilterFactoryBean.setFilterChainDefinitionMap(map);return shiroFilterFactoryBean;}
}

配置了 ShiroFilterFactoryBean

查看 ShiroFilterFactoryBean实现了 FactoryBean 接口

public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor {private SecurityManager securityManager;// 用于自定义的 filterprivate Map<String, Filter> filters = new LinkedHashMap();// 用于自定义的过滤器链private Map<String, String> filterChainDefinitionMap = new LinkedHashMap();// 设置全局的 urlprivate String loginUrl;private String successUrl;private String unauthorizedUrl;// 生成的实例private AbstractShiroFilter instance;// ...public Object getObject() throws Exception {if (this.instance == null) {this.instance = this.createInstance();}return this.instance;}protected AbstractShiroFilter createInstance() throws Exception {log.debug("Creating Shiro Filter instance.");FilterChainManager manager = this.createFilterChainManager();PathMatchingFilterChainResolver chainResolver = new PathMatchingFilterChainResolver();chainResolver.setFilterChainManager(manager);return new ShiroFilterFactoryBean.SpringShiroFilter((WebSecurityManager)securityManager, chainResolver);}// ...
}
  • Map<String, Filter> filterskey 是过滤器名称,value 是 Filter
  • Map<String, String> filterChainDefinitionMapkey 是 uri,value 是过滤器名称

Spring 容器会自动检测到 FactoryBean 接口,并调用其 getObject() 方法获取实际的 bean 对象,所以,最终会调用 createInstance() 方法。

createInstance() 方法:创建 FilterChainManager 对象、PathMatchingFilterChainResolverPathMatchingFilterChainResolver 设置了 FilterChainManager)对象,再创建了内部类 SpringShiroFilter 对象

  1. this.createFilterChainManager():创建 FilterChainManager
    • 创建 DefaultFilterChainManager 实例,并将默认过滤器、自定义过滤器存放到属性 Map<String, Filter> filters
    • 并给所有的过滤器设置 urlloginUrlsuccessUrlunauthorizedUrl
    • 构造过滤器链,并存放到属性 Map<String, NamedFilterList> filterChains,其中,key 为 uri,value 为 NamedFilterList (extends List<Filter>);并将 uri 存放在 PathMatchingFilter 类的 Map<String, Object> appliedPaths 属性

createFilterChainManager() 方法:

在这里插入图片描述

①:new DefaultFilterChainManager():管理 过滤器 filters(包括默认过滤器 + 自定义过滤器)、过滤器链

在这里插入图片描述
在构造器中,将默认的过滤器添加到 filters 属性中

默认过滤器 DefaultFilter:枚举类

public enum DefaultFilter {anon(AnonymousFilter.class),authc(FormAuthenticationFilter.class),authcBasic(BasicHttpAuthenticationFilter.class),authcBearer(BearerHttpAuthenticationFilter.class),logout(LogoutFilter.class),noSessionCreation(NoSessionCreationFilter.class),perms(PermissionsAuthorizationFilter.class),port(PortFilter.class),rest(HttpMethodPermissionFilter.class),roles(RolesAuthorizationFilter.class),ssl(SslFilter.class),user(UserFilter.class);
}

②:applyGlobalPropertiesIfNecessary(filter):设置 loginUrlsuccessUrlunauthorizedUrl

在这里插入图片描述

applyLoginUrlIfNecessary() 方法为例:

在这里插入图片描述
在这里插入图片描述

如果 ShiroFilterFactoryBean#loginUrl 有值且 AccessControlFilter#loginUrl 的值为默认值(/login.jsp),那么就会给 AccessControlFilter#loginUrl 设置值

③:处理自定义的过滤器 filter:将自定义过滤器添加到 DefaultFilterChainManager

在这里插入图片描述

④:getFilterChainDefinitionMap() & createChain():构造过滤器链

createChain() 方法:

在这里插入图片描述

注意下面这行代码:

String[] filterTokens = this.splitChainDefinition(chainDefinition);

将一个字符串可以转化为字符串数组,就可猜测是不是可以配置多个过滤器 map.put("/login", "anon, authc");

对此数组进行 for 循环:

String[] nameConfigPair = this.toNameConfigPair(token);
this.addToChain(chainName, nameConfigPair[0], nameConfigPair[1]);

又将一个字符串 token 转化为了一个 字符串数组,且通过 "["toNameConfigPair 内部实现)将数组分为了两部分

所以,最终可以配置成:

map.put("/login", "authc, roles[admin,user], perms[file:edit]");

addToChain() 方法:生成带有 name(过滤 uri)的过滤器链 NamedFilterList,并将过滤器添加其中(过滤 uri 和过滤器是一对多关系)

在这里插入图片描述

1、applyChainConfig() 方法:存放所有的过滤 uri

在这里插入图片描述

1-1、PathMatchingFilter#processPathConfig() 方法:

  • 属性
    • PatternMatcher pathMatcher:用于请求 uri 和已配置的 uri 进行配置
    • Map<String, Object> appliedPaths: 存放所有的过滤 uri

在这里插入图片描述

2、ensureChain(chainName) 方法:通过 uri 获取过滤器链,如果没有,则创建 SimpleNamedFilterList,并将此过滤器链放入 filterChains 属性中,返回;如果通过 uri 获取到过滤器链,则直接返回

在这里插入图片描述

2-1、SimpleNamedFilterList:其实就是一个有名字 name 的 List<Filter>

  • name:uri
  • List<Filter>:配置的过滤器

一个 uri 可以对应多个过滤器,所以,Filter 是一个 List 集合

在这里插入图片描述

  1. new PathMatchingFilterChainResolver():创建 PathMatchingFilterChainResolver,负责路径和过滤器链的解析、匹配,根据 url 找到过滤器链

2、第二阶段:正式请求

任何请求都会先经过 Shiro 先过滤,直到成功才会执行 web 本身的过滤器

一个请求过来时,先到达 AbstractShiroFilter#executeChain()方法,去根据 request 解析出来的 url 找到对应的过滤链,然后执行过滤器链。

1、executeChain() 方法如下:

在这里插入图片描述

1-1、getExecutionChain() 方法:这里的 resolver 就是 PathMatchingFilterChainResolver,根据 uri 获取过滤器链 ProxiedFilterChain

在这里插入图片描述

1-2、getChain() 方法:从属性 filterChains 循环匹配请求 uri,若匹配成功,则调用 filterChainManager.proxy();否则,返回 null

在这里插入图片描述

1-2-1、pathMatches() 方法:

在这里插入图片描述

1-2-1-1、AntPathMatcher#matches():使用 AntPathMatcher 进行匹配

在这里插入图片描述

doMatch():匹配 uri 和 requestUri,考虑到通配符 **

在这里插入图片描述

2、chain.doFilter(request, response);:执行过滤器链

在这里插入图片描述
在这里插入图片描述

过滤器类结构图:

在这里插入图片描述

最终调用 AdviceFilter#doFilterInternal() 方法:preHandle() 方法决定过滤器链是否执行

在这里插入图片描述

通过属性 appliedPaths 循环判断是否与当前请求的 uri 相匹配,如果通过,直接返回 true,否则,进入 onPreHandle() 方法判断:

在这里插入图片描述

onPreHandle() 方法供子类去重写:

在这里插入图片描述

AnonymousFilter:匿名访问。

在这里插入图片描述
任何对象访问都一直返回 true,表明任何用 AnonymousFilter 过滤的请求都不需要验证。因为它一直返回 true

AccessControlFilter:需要身份验证的过滤器

在这里插入图片描述

isAccessAllowed()onAccessDenied() 方法决定

  • isAccessAllowed():决定了当前请求的subject是否允许访问
  • onAccessDenied():在被拒绝访问时处理。AccessControlFilter 类有很多子类重载了该方法。以 FormAuthenticationFilter 类的onAccessDenied() 方法为例

在这里插入图片描述
如果是登陆请求,则执行登陆操作;否则,保存请求链接跳转到登陆请求界面

executeLogin() 方法:创建 token,调用 Subject#login() 方法

在这里插入图片描述
总结流程:

在这里插入图片描述

http://www.hrbkazy.com/news/48514.html

相关文章:

  • 有网站如何做淘宝客怎么建网站卖东西
  • 河南建设网站公司最有效的网络推广方式
  • 绵阳建网站哪家好网站提交收录软件
  • 南山企业网站建设清远网站seo
  • 做网站是不是需要服务器网站搜索引擎
  • 中国采购网官网入口东莞网站推广行者seo08
  • 佛山网站推广seo商业推广费用一般多少
  • 偷拍做自拍视频网站考拉seo
  • 自己做新闻网站抖音推广平台联系方式
  • 外贸型网站建设的基本流程企业策划方案怎么做
  • 如何用wordpress建一个网站游戏代理平台
  • 安陆做网站公司电商运营入门基础知识
  • 开元棋牌网站怎么做泉州百度竞价开户
  • 的网站制作seo常用工具
  • 怎么制作图片和文字一起优化网站排名方法教程
  • 许昌做网站公司报价开发一个网站
  • 什么网站上做任务赚钱免费seo网站的工具
  • 网站推荐靠谱的能长久看的seo优化排名软件
  • asp动态网站开发总结北京seo公司华网白帽
  • 网站支付链接怎么做济南网站优化排名
  • 济南集团网站建设seo千享科技
  • 中华建设杂志社网站南京网站制作
  • 公司网站如何做二维码seo查询网站是什么
  • 淘客怎么做网站单页想做seo哪里有培训的
  • 广州网站改版设计公司上海网站设计公司
  • 有什么类似凡科建站疫情最新情况
  • 培训教育行业网站建设方案网站优化seo
  • 做网站用什么域名好百度百度百度一下
  • 医疗网站建设方案小红书搜索关键词排名
  • 如何做网站的cdnseo文章生成器