博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我记录网站综合系统 -- 技术原理解析[10:PermissionChecker流程]
阅读量:7258 次
发布时间:2019-06-29

本文共 2002 字,大约阅读时间需要 6 分钟。

源代码位置:\Web\Mvc\Processors:PermissionChecker.cs

Config ->

    wojilu.Web.Mvc.CoreHandler.ProcessRequest - >

          wojilu.Web.Mvc.CoreHandler.ProcessRequest: ProcessContext.Begin ->

               RouteProcess
                    InitContextProcess

        ActionMethodChecker

                      ForbiddenActionChecker

                      LoginActionChecker 

                      HttpMethodChecker

                      PermissionChecker

最后一个checker的位置在生成页面之前,这个checker也是对于做成页面的Layout使用许可的预检查。

 

 1 
    
public
 
override
 
void
 Process( ProcessContext context ) {
 2 
 3 
            MvcEventPublisher.Instance.BeginCheckPermission( context.ctx );
 4 
            
if
 (context.ctx.utils.isSkipCurrentProcessor()) 
return
;
 5 
 6 
            MvcContext ctx 
=
 context.ctx;
 7 
 8 
            IList paths 
=
 ctx.utils.getLayoutPath();
 9 
            
for
 (
int
 i 
=
 paths.Count 
-
 
1
; i 
>=
 
0
; i
--
) {
10 
11 
                ControllerBase controller 
=
 ControllerFactory.FindSecurityController( paths[i].ToString(), ctx );
12 
                
if
 (controller 
==
 
null
continue
;
13 
14 
                
if
 (ctx.controller.utils.isCheckPermission( controller.GetType() )) {
15 
                    controller.CheckPermission();
16 
                }
17 
18 
                
if
 (ctx.utils.isEnd()) {
19 
                    String msg 
=
 controller.utils.getActionResult();
20 
                    context.endMsg( checkFrame( ctx, msg ) );
21 
                    
return
;
22 
                }
23 
            }
24 
25 
            context.getController().CheckPermission();
26 
            
if
 (ctx.utils.isEnd()) {
27 
                context.endMsg( checkFrame( ctx, context.getController().utils.getActionResult() ) );
28 
                
return
;
29 
            }
30 
31 
        }

 ctx.utils.getLayoutPath:

1 
        
///
 
<summary>
2 
        
///
 获取所有的布局文件的路径
3 
        
///
 
</summary>
4 
        
///
 
<returns></returns>
5 
        
public
 IList getLayoutPath() {
6 
            
if
 (_layoutPath 
==
 
null
) _layoutPath 
=
 PathHelper.GetPathList( ctx.route.getRootNamespace(), ctx.controller.GetType().Namespace );
7 
            
return
 _layoutPath; 
8 
        }

任何一个页面可以看做小的画面元素的组合,小的画面元素可以看做更小的画面元素的组合。wojilu将这样一个个基本元素称之为Layout。页面就是一个个Layout的嵌套组合。这些Layout的访问权限就在这里检查。可能大部分说,这样的检查是多余的,但是,在日益猖獗的黑客行为上,严格的安全是第一位的。

这篇,其实可以说的东西不多,毕竟只是一个小的Processor。

下面来总结一下wojilu的特点

1.所有的processor在执行前,都做了广播操作,以便系统的其他部分可以得到通知,做一些过滤。

2.所有的Processor都可以跳过。

3.所有的页面请求都统一放在Context容器里面。

4.我记录的安全检查,很多是基于方法特性批注的,这个和MS的MVC有点像。

 

下一篇开始讲述wojilu的页面引擎。

我记录1.7版,在长达5个月的开发和测试后,将在6月底推出(不过,介于以前跳票的经验,可能这次还要跳票,作者是个注重品质的老实人),敬请期待。

转载地址:http://goodm.baihongyu.com/

你可能感兴趣的文章
学习SpringMVC——你们要的REST风格的CRUD来了
查看>>
java中获取比毫秒更为精确的时间
查看>>
将数据导出到Excel2007格式。
查看>>
【SpringMVC学习07】SpringMVC中的统一异常处理
查看>>
C++语言出现的BUG
查看>>
java 集合
查看>>
【转载】ODBC, OLEDB, ADO, ADO.Net的演化简史
查看>>
Android 设置图片透明度
查看>>
EasyUI Window和Layout
查看>>
英语单词词性
查看>>
Cesium原理篇:3D Tiles(3)个人总结
查看>>
SpringBoot2 时间类型自动格式化 自动转换
查看>>
笔记--设计模式精解c++-GoF 23 种设计模式解析
查看>>
Android OpenGL(3)
查看>>
去掉StringBuilder或String 最后一个项逗号
查看>>
SaundProgressBar
查看>>
转: when.js原理和核心实现
查看>>
TextView于getCompoundDrawables()使用演示样本的方法
查看>>
Glade编程
查看>>
什么是 HTTPS
查看>>