WebApi限制IP地址请求
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Http.Filters;
using System.Net.Http;
using System.Net;
using System.Collections;
using System.Text.RegularExpressions;
using System.IO;
using System.Web.UI.WebControls;
using System.Text;
using System.Web.Caching;
using System.Xml.Linq;
namespace IM.WeiXinApi.Filter
{
public class AuthorizeAttrbute : System.Web.Http.Filters.AuthorizationFilterAttribute
{
public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
{
var ipaddress = GetIpaddress(); //用户的ip
object obj = null;
obj = GetCache(ipaddress+"api"); //获取请求api的ip列表
{
if (obj == null)
{
if (!IpConfig(ipaddress))
{
//返回401错误
actionContext.Response = new HttpResponseMessage
{
Content = new StringContent("当前ip地址" + ipaddress + "无访问权限",
Encoding.GetEncoding("UTF-8"), "application/json"),
StatusCode = HttpStatusCode.Unauthorized
};
return;
}
else
{
SetCache(ipaddress+"api",, );
}
}
}
base.OnAuthorization(actionContext);
}
public static bool IpConfig(string ip)
{
string urlIndex = "~/Xml/roleip.xml";
string FileName = System.Web.HttpContext.Current.Server.MapPath(urlIndex);
XDocument doc = XDocument.Load(FileName);
var rel = from p in doc.Descendants("item") where p.Attribute("ip").Value.ToLower() == ip select p;
return rel != null && rel.Count() > ? true : false;
}
/// <summary>
/// 获取当前应用程序指定CacheKey的Cache值
/// </summary>
/// <param name="CacheKey"></param>
/// <returns></returns>
public static object GetCache(string CacheKey)
{
System.Web.Caching.Cache objCache = HttpRuntime.Cache;
return objCache[CacheKey];
}
/// <summary>
/// 设置缓存
/// </summary>
/// <param name="CacheKey"></param>
/// <param name="objObject"></param>
/// <param name="expires_in"></param>
public static void SetCache(string CacheKey, object objObject, double expires_in)
{
Cache objCache = HttpRuntime.Cache;
objCache.Insert(CacheKey, objObject, null, DateTime.Now.AddHours(expires_in), Cache.NoSlidingExpiration);
}
/// <summary>
/// 获取IP地址
/// </summary>
/// <returns></returns>
public static string GetIpaddress()
{
string result = String.Empty;
result = HttpContext.Current.Request.ServerVariables["HTTP_CDN_SRC_IP"];
if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]; if (string.IsNullOrEmpty(result))
result = HttpContext.Current.Request.UserHostAddress; if (string.IsNullOrEmpty(result) || !IsIP(result))
return "127.0.0.1"; return result;
}
public static bool IsIP(string ip)
{
return Regex.IsMatch(ip, "^((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)$");
}
}
}
WebApi限制IP地址请求的更多相关文章
- 2-4-搭建DHCP服务实现动态分配IP地址-NTP网络时间同步
本节所讲内容: •DHCP服务器工作原理 •使用DHCP为局域网中的机器分配IP地址 •使用DHCP为服务器分配固定IP地址 •ntpdate加计划任务同步服务器时间 ---------------- ...
- 网络通讯与IP地址
1.主机:Host,台式机,笔记本,手机等设备 2.网络介质:网线,光纤,无线网Wi-Fi.移动网络 3.数据:一串子节 网络通讯的检测:安装wireshark,通常称为抓包工具 抓,capture ...
- 园区IP地址规划(非常详细)
转:https://mp.weixin.qq.com/s/Zlm7x5eunIYLAG7Sp0yVCQ 经过这些年工作,接触从几万.几十万到上亿的项目都有: 我简单总结了接触的大部分的项目,将园区网核 ...
- 获取IP地址 & 伪装IP地址发送请求
//获取请求客户端IP地址 public final static String getIpAddress(HttpServletRequest request) throws IOExcepti ...
- 多级反向代理下,Java获取请求客户端的真实IP地址多中方法整合
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的.但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实I ...
- java 获取请求客户端的真实IP地址
转载自:http://leiyongping88.iteye.com/blog/1545930 用request.getRemoteAddr();方法获取的IP地址是:127.0.0.1或192.16 ...
- 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址;
package com.utils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.servlet.htt ...
- 服务器使用nginx做代理,通过HttpServletRequest获取请求用户真实IP地址
首先,在nginx配置中添加如下配置 server { listen ; server_name www.wenki.info; #要访问的域名 charset utf8; location / { ...
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
随机推荐
- Microsoft Dynamics CRM4.0编程---说明
Introduction(说明) If your organization has customers, you need a software system to help you manage y ...
- 捕android程序崩溃日志
主要类别: package com.example.callstatus; import java.io.File; import java.io.FileOutputStream; import j ...
- Android 出现警告Exported service does not require permission
在配置Android清单文件的时候,配置service,或者activity,或者receive的时候,出现Exported service does not require permission警告 ...
- codevs 2241 排序二叉树
/* WTF 写了好久了 开始的时候题目读错了 建图建错了 搜索写的也不好 感觉会T 总之 第一次写的很low 贴一下吧 */ #include<iostream> #include< ...
- Linux基础知识之 系统启动流程
[1]Linux启动的几个主要阶段 启动流程示意图
- hdu 2111
#include <iostream> #include <algorithm> using namespace std; struct money { int s; int ...
- div整体布局分析
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- zendstudio正则匹配查询
Ctrl+H之后,显示的File Search标签页为Containing text. Alt+/ 帮助提示正则匹配的语法. 例子如下: select type from table where id ...
- mysql explain 命令解释
转载http://bzyyc.happy.blog.163.com/blog/static/6143064720115102551554/ key实 际使用的索引.如果为NULL,则没有使用索引.很少 ...
- (转)select 1 from ... sql语句中的1代表什么意思? .
select 1 from ..., sql语句中的1代表什么意思?查出来是个什么结果? select 1 from table;与select anycol(目的表集合中的任意一行 ...