.net C#,保护每个方法的最佳实践是什么?
我有一个Web项目,它有一个处理一些数据操作的业务层。我想通过在执行方法之前检查是否存在活动的未结束有效的.net C#,保护每个方法的最佳实践是什么?,c#,asp.net,security,session,C#,Asp.net,Security,Session,我有一个Web项目,它有一个处理一些数据操作的业务层。我想通过在执行方法之前检查是否存在活动的未结束有效的会话来保护部分或所有方法 我最初想在类上使用属性,但我无法正确运行它。因为该类是一个普通类,不是从System.Web.Page派生的。调用所需的BL实例时,属性类从不运行。此外,有些方法可能不需要有效的会话,因此整个类可能不需要完整的安全性。而且,在方法的每一个开头添加一行检查会话,这听起来不是很有希望 如果您问我为什么需要通过方法进行安全保护,我可以这样解释: 这是一个网络项目 人们可
会话来保护部分或所有方法
我最初想在类上使用属性
,但我无法正确运行它。因为该类是一个普通类,不是从System.Web.Page
派生的。调用所需的BL实例时,属性类从不运行。此外,有些方法可能不需要有效的会话,因此整个类可能不需要完整的安全性。而且,在方法的每一个开头添加一行检查会话,这听起来不是很有希望
如果您问我为什么需要通过方法进行安全保护,我可以这样解释:
- 这是一个网络项目
- 人们可能会从填充开始,但在那一刻再也没有得到它
- 比如说,该屏幕等待大约30分钟
- 会议已经结束
- 用户回到计算机前,单击“保存”按钮,但该过程不应完成
保存操作可以是删除
操作或选择
由于有很多类型的表单和内容,我有BL.ItemManager
,BL.VideoManager
,BL.ServiceManager
等等。。。因此,在这些类中有很多save、delete和select方法
因此,是否有一种简洁的方法可以通过在运行进程之前检查会话来保护某些方法您可以使用面向方面的方法;可能是一种选择
您所需要做的就是在方法调用之前使用PostSharp创建一个属性来注入代码,以检查会话是否处于活动状态。有点像
[SessionAlive]
public void SomeMethod()
或者您可以只使用Global.asax文件中的Session\u End
方法,或者您可以只使用一些javascript代码。另一种可能是使用Castle Dynamic proxy-用它包装您的服务。动态代理允许您截取方法调用,并用一些通用行为包装它们——您可以只截取所需的特定方法,并添加会话检查
与postsharp不同,动态代理是免费的。AOP是满足您需求的一种很好的技术。您可以使用PostSharp和Castle的DynamicProxy。这些框架允许您拦截方法调用,并且您可以在拦截器中执行安全检查
PostSharp和Castle DynamicProxy之间最大的技术区别在于PostSharp修改了IL代码,Castle DynamicProxy在其中创建了类的派生类型,并在运行时为您提供了一个新的派生实例。这意味着,当您反编译使用PostSharp的代码时,您会看到一些其他代码不是用原始C Sharp代码编写的
如果您选择DynamicProxy方法,您应该通过工厂实例化您的类,但如果您更喜欢PostSharp,您可以直接使用您的类。您所需要的只是添加一些属性。另一方面,PostSharp不是免费的
最后,您可以自己实现DynamicProxy。是我写的一个简单的动态氧气发生器。您可以处理方法调用之前/之后和错误事件。这只是一个示例代码,如果您打算在一个重要的应用程序中使用它,您应该更喜欢Castle。AOP绝对是实现这一点的方法。除了其他答案中已经提出的通用AOP框架外,您可能还想知道.NET framework还包括一个用于此类安全验证的AOP机制。要使用它,只需创建(并使用)一个继承自的属性,以及一个可用于验证会话有效性的实现 非常感谢您的投入。我马上查你的密码谢谢。这看起来很有希望。