上海正规网站建设软件公司运营是做什么的
- 作者: 五速梦信息网
- 时间: 2026年03月21日 09:22
当前位置: 首页 > news >正文
上海正规网站建设,软件公司运营是做什么的,做流量网站,网上怎么查自己的房产信息目录 1、第一阶段#xff1a;启动服务#xff0c;构建类的功能2、第二阶段#xff1a;正式请求 1、第一阶段#xff1a;启动服务#xff0c;构建类的功能
查看 Shiro 配置类 ShiroConfiguration#xff1a;
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);//配置系统受限资源//配置系统公共资源MapString,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 MapString, Filter filters new LinkedHashMap();// 用于自定义的过滤器链private MapString, 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);}// …
}MapString, Filter filterskey 是过滤器名称value 是 FilterMapString, String filterChainDefinitionMapkey 是 urivalue 是过滤器名称
Spring 容器会自动检测到 FactoryBean 接口并调用其 getObject() 方法获取实际的 bean 对象所以最终会调用 createInstance() 方法。 createInstance() 方法创建 FilterChainManager 对象、PathMatchingFilterChainResolverPathMatchingFilterChainResolver 设置了 FilterChainManager对象再创建了内部类 SpringShiroFilter 对象 this.createFilterChainManager()创建 FilterChainManager。 创建 DefaultFilterChainManager 实例并将默认过滤器、自定义过滤器存放到属性 MapString, Filter filters 并给所有的过滤器设置 urlloginUrl、successUrl、unauthorizedUrl构造过滤器链并存放到属性 MapString, NamedFilterList filterChains其中key 为 urivalue 为 NamedFilterList (extends ListFilter)并将 uri 存放在 PathMatchingFilter 类的 MapString, 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)设置 loginUrl、successUrl、unauthorizedUrl 以 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 进行配置MapString, Object appliedPaths 存放所有的过滤 uri 2、ensureChain(chainName) 方法通过 uri 获取过滤器链如果没有则创建 SimpleNamedFilterList并将此过滤器链放入 filterChains 属性中返回如果通过 uri 获取到过滤器链则直接返回 2-1、SimpleNamedFilterList其实就是一个有名字 name 的 ListFilter。
nameuriListFilter配置的过滤器
一个 uri 可以对应多个过滤器所以Filter 是一个 List 集合 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() 方法 总结流程
- 上一篇: 上海整形网站建设语音app开发
- 下一篇: 上海知名网站建2021小说排行榜百度风云榜
相关文章
-
上海整形网站建设语音app开发
上海整形网站建设语音app开发
- 技术栈
- 2026年03月21日
-
上海珍岛做网站怎么样网站怎么做动静分离
上海珍岛做网站怎么样网站怎么做动静分离
- 技术栈
- 2026年03月21日
-
上海这边敲墙拆旧做啥网站的比较多网页建站分为几个类型
上海这边敲墙拆旧做啥网站的比较多网页建站分为几个类型
- 技术栈
- 2026年03月21日
-
上海知名网站建2021小说排行榜百度风云榜
上海知名网站建2021小说排行榜百度风云榜
- 技术栈
- 2026年03月21日
-
上海制作网站公司帝国 织梦 wordpress
上海制作网站公司帝国 织梦 wordpress
- 技术栈
- 2026年03月21日
-
上海制作网站焦作网站设计多少钱
上海制作网站焦作网站设计多少钱
- 技术栈
- 2026年03月21日






