using Dscf.Client.Web.Class;
using Dscf.Client.Web.DscfService;
using Dscf.Client.Web.Handler;
using System;
using System.Collections.Generic;
using System.Linq;
using System.ServiceModel;
using System.Web;
using System.Web.SessionState;
namespace Dscf.Client.Web.HttpModules
{
public class Authentication : IHttpModule, IRequiresSessionState
{
public void Dispose() { }
public void Init(HttpApplication context)
{
//在ASP.NET开始执行HTTP请求的处理程序之前引发这个事件
context.PreRequestHandlerExecute += context_PreRequestHandlerExecute;
}
private void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
Uri uri = application.Context.Request.Url;
string loginUrl = "/View/Login.aspx";
if (!GetCommonUrl().Contains(uri.AbsolutePath.ToLower())
&& !uri.AbsolutePath.StartsWith("/combres.axd/")
&& (uri.AbsolutePath.Contains(".aspx") || uri.AbsolutePath.Contains(".ashx")))
{
OperaterInfo oper = application.Context.Session["Operator"] as OperaterInfo;
if (oper == null)
{
application.Response.Redirect(loginUrl, true);
}
List<PageRights> rights = application.Session["Rights"] as List<PageRights>;
if (rights == null || rights.Count <= 0)
{
if (oper.Roles == null || oper.Roles.Length <= 0)
{
GoToForbiddenPage(application.Context);
}
else
{
rights = new List<PageRights>();
foreach (var role in oper.Roles)
{
rights.AddRange(role.PageRights);
}
application.Session["Rights"] = rights;
}
}
int type;
int.TryParse(application.Request["type"], out type);
var right = rights.FirstOrDefault(m => m.PageUrl.Trim().ToLower() == uri.AbsolutePath.ToLower() && m.EditRight == type);
if (right == null)
{
if (uri.AbsolutePath.EndsWith(".ashx"))
{
application.Response.Write(new ResultMessage(false, "您没有权限进行此操作,请联系管理员获取更高权限!"));
application.Response.End();
}
else
{
GoToForbiddenPage(application.Context);
}
}
}
}
private void GoToForbiddenPage(HttpContext context)
{
context.Response.Redirect("/Error/forbidden.html", true);
}
private List<string> GetCommonUrl()
{
List<string> list = new List<string>();
list.Add("/View/Login.aspx".ToLower());
list.Add("/View/FinaInvestList.aspx".ToLower());
list.Add("/Handler/Login.ashx".ToLower());
list.Add("/View/InvestLogin.aspx".ToLower());
list.Add("/Handler/InvestLoginHandler.ashx".ToLower());
list.Add("/Handler/FinaInvestHandler.ashx".ToLower());
list.Add("/Handler/kefile_manager_json.ashx".ToLower());
list.Add("/Handler/keupload_json.ashx".ToLower());
list.Add("/Handler/CodeHandler.ashx".ToLower());
list.Add("/Handler/IsUserInfoExistHandler.ashx".ToLower());
list.Add("/Handler/JumpLoginHandler.ashx".ToLower());
list.Add("/");
return list;
}
}
}
- asp.net Ajax Post 请求一般处理程序
其实很早就开通博客园了,一直想写些有价值的东西,供自己以后查阅的同时,也可以帮助别人遇到此类问题时能有一个好的解决方法.但是由于各种原因, 就没有实施我的想法.今天突然很想写下一篇文章,不知道我的第一 ...
- http请求在asp.net中的请求过程
当请求一个*.aspx文件的时候,这个请求会被inetinfo.exe进程截获,它判断文件的后缀(aspx)之后,将这个请求转交给 ASPNET_ISAPI.dll,ASPNET_ISAPI.dll会 ...
- 详解ASP.NET MVC的请求生命周期
本文的目的旨在详细描述asp.net mvc请求从开始到结束的每一个过程. 我希望能理解在浏览器输入url并敲击回车来请求一个asp.net mvc网站的页面之后发生的任何事情. 为什么需要关心这些? ...
- ASP.NET之自定义异步HTTP处理程序(图文教程)
前面我们学习了关于关于自定义同步HTTP处理程序,相信大家可能感觉有所成就,但是这种同步的机制只能对付客户访问较少的情况或者数据处理量不大的情况,而今天这篇文章就是解决同步HTTP处理程序的这个致命缺 ...
- ASP.NET 跨域请求之jQuery的ajax jsonp的使用解惑 (转载)
前天在项目中写的一个ajax jsonp的使用,出现了问题:可以成功获得请求结果,但没有执行success方法,直接执行了error方法提示错误——ajax jsonp之前并没有用过,对其的理解为跟普 ...
- Asp.net MVC进入请求管道的过程
Asp.net MVC进入请求管道的过程 Asp.Net MVC 跟AspNet 入口解释 Asp.Net MVC请求处理过程 mvc 请求模型 mvc的原理 mvc模型 NewMVCPipleLin ...
- ASP.NET MVC的请求生命周期
我希望能理解在浏览器输入URL并敲击回车来请求一个ASP.NET MVC网站的页面之后发生的任何事情. 为什么需要关心这些?有两个原因.首先是因为ASP.NET MVC是一个扩展性非常强的框架.例如, ...
- js页面(页面上无服务端控件,且页面不刷新)实现请求一般处理程序下载文件方法
对于js页面来说,未使用服务端控件,点击下载按钮时不会触发服务端事件,且不会提交数据到服务端页面后台进行数据处理,所以要下载文件比较困难.且使用jQ的post来请求一般处理程序也不能实现文件的下载,根 ...
- 使用 NLog 给 Asp.Net Core 做请求监控
为了减少由于单个请求挂掉而拖垮整站的情况发生,给所有请求做统计是一个不错的解决方法,通过观察哪些请求的耗时比较长,我们就可以找到对应的接口.代码.数据表,做有针对性的优化可以提高效率.在 asp.ne ...
随机推荐
- [Offer收割]编程练习赛4 A 满减优惠
满减优惠 描述 最近天气炎热,小Ho天天宅在家里叫外卖.他常吃的一家餐馆一共有N道菜品,价格分别是A1, A2, ... AN元.并且如果消费总计满X元,还能享受优惠.小Ho是一个不薅羊毛不舒服斯基的 ...
- H5与Native交互的实现
PDF文件下载:将后缀png改成PDF.
- viewpage的使用
http://blog.csdn.net/loongggdroid/article/details/19970523
- ajax实现的无刷新分页代码实例
一.html代码部分: <table class="table style-5"> <thead id="t_head"> ...
- Access“存储过程"参数顺序要与执行代码生成的参数顺序一致
OleDbParameter olp; OleDbCommand cmd = new OleDbCommand("insertYjsData"); olp = new OleDbP ...
- [ActionScript 3.0] 通过三角形获得 3D 效果
Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本 在 ActionScript 中,使用Graphics.drawTriangles()方法执行位图转换,因为 3D ...
- [Java] 字符流 Writer,输出字符数据PrintWriter
package test.stream; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Fi ...
- Javascript 原型编程初探
创建两个对象独立运行 var PlayTrace = function (interVal,name) { this.interVal = interVal; this.playName = name ...
- BestCoder Round #79 (div.2)
1001.没推到题解那么细,枚举一下也可以.用通分可以避免小数精度问题. #include<iostream> #include<stdio.h> using namespac ...
- 解决WinForm(C#)中MDI子窗体最大化的问题
“用MDI方式打开一个子窗口体后,总是不能最大化显示,明明子窗口体的WindowState设置为Maximized?”,相信有很多人会遇到这的样问题,请按下面的方法设置即可使MDI子窗体最大化: 1. ...