1. IIS过滤器,怎么能捕获到请求的URL并修改后转向
核心提示:ISAPI的网站,URL地址为: “http://www.test.com/disapi.dll/blist?aa=123&bb=456” 我想做个IIS过滤器,获得这个地址串,进行一些访问权限的操作...我从网上找到一些资料,用GetFilterVersion和HttpFilterProc写了
一个过滤器,可是取不到全部地址串,只能取到“www.test.com”
如何才能取到全部地址串,并在处理后再分别转向到不同的网址??
//------------向对方发回信息 两种方案(1 发送 HTML内容给对方,2 打开服务器已有文件内容给对方)---------------------
if URL_TempFile='' then
BEGIN
sMsg:='<head><title>IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供 防盗链 保护</title></head><body><h1>文件跳转</h1>';
sMsg:=sMsg+'IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供 防盗链 保护 <a HREF=http://';
sMsg:=sMsg+ sWebSite +'/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl +'?URL="'+ sURL + sQUERY_STRING +'">跳转</a></body>';
sMsgLen:=length(sMsg);
Try
sHead:= 'Location: http://'+ sWebSite + '/ErrorFile/' + IISColanderSession.SessionErrorFile_GetUrl+'?URL="' + sURL + sQUERY_STRING+'"' + #13#10;
pfc.AddResponseHeaders(pfc,pchar(sHead),0);
sHead:= '302 IISColander(' + IISColanderSession.SessionWebUrl + ')为本站提供防盗链保据';
pfc.ServerSupportFunction(pfc, SF_REQ_SEND_RESPONSE_HEADER, PChar(sHead), 0, 0);
pfc.WriteClient(pfc, PChar(sMsg), sMsgLen, 0);
Except
IISColanderSession.WriteLog('Error: 防盗链回信息于对方操作失败'); //日志记录点
End;
Result:=SF_STATUS_REQ_FINISHED;
End
Else
Begin
Try
IISColanderSession
2. java 过滤器
想要屏蔽jsp,
<filter-mapping>
<filter-name>IPFilter</filter-name>
<url-pattern/*</url-pattern>
</filter-mapping>
就行了
3. java 中 使用Filter过滤器 如何获取URL中的数据,具体如下:
不知道你说的是什么意思,你可以吧数据加在url上一起发送,在filter中用request.getParameter(“数据名称”)获得,request要转为HttpServletRequest
4. 过滤器 问题
过滤器 首先在 web.xml中配置
<filter-mapping>
<filter-name>encoding(名字)</filter-name>
<url-pattern>/*(有效范围/*代表所有,如果是/page/* 就代表请求page文件路径下的所有请求 都会经过过滤器处理)</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encoding(对应上面的名字)</filter-name>
<url-pattern>com.test.CharEncoding(过滤器所在位置)</url-pattern>
</filter-mapping>
然后是过滤器写法
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//获得HttpServletRequest
HttpServletRequest req=(HttpServletRequest)request;
//讲所有经过这个 过滤器处理的请求的编码设置为utf-8
req.setCharacterEncoding("UTF-8");
//设置完之后 就继续运行程序
chain.doFilter(request, response);
}
如果程序好吧 一条河流 水在一直往下流
过滤器 就是 在指定位置上 放了个滤网
你要知道
chain.doFilter(request, response);
是什么意思 就要知道 web 程序运行 原理
客户端 访问web程序 是通过提交一个请求到
web服务器 即request(访问方式有 get post..等 访问内容...想深入了解自己查,我这写不了这么多)
然后web 服务器 通过request 请求的方式和内容
进行操作,并返回
相应的结果(response) 给客户端(一般式返回一个jsp结果页面)
就是这么一个 过程
过滤器中的方法
就是 将 客户端的 请求(request)进行 “过滤”
然后 将过滤后得到的的request 继续由web程序里的
其他组件完成后续工作 返回结果
而调用 chain.doFilter(request, response);
就是让 "过滤"后的request 继续执行,
进入其他 web程序组件中
当然 如果你不写这句话
request走到这个地方 就会停止
5. 在JAVA中的如何在过滤器中取到每一个URL请求
直接/* 拦截所以请求
6. java中 如何获取客户端请求的url
在servlet中的request对象中有url,可以用方法 getRequestURI().
如果在程序中得不到该请求的request对象内 那就得不到。
所以得到容url的 关键是 先得到 request
7. JSP过滤器这样设置过滤一个次级路径下的所有URL
/sites/*这样就可以了,如果这个文件夹是某个子目录的话还需要添加它的父目录;
下面内是些例子
<url-pattern>:指定和过滤器关联容的URL,为”/*”表示所有URL;
例子1:单个过滤器配置:容器将其应用于所有接收的请求
<url-pattern>/*</url-pattern>
例子2:过滤器应用到特定目录或资源(文件)的配置:此容器只有在接收到对/mydocs目录中的资源的请求时才会应用该过滤器。
<url-pattern>/mydocs/*</url-pattern>
8. java filter 如何中获取请求地址
当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp 文件,而是先由代理服务器去访问index.jsp。
代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的。
所以index.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址 的方法:
9. JSP中用filter 过滤某个包中的所有servlet
web.xml中这样配置:
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>com.zq.servlet.Login</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/servlet/Login</url-pattern>
</servlet-mapping>
或者不配置web.xml在servlet中写注解:
@WebServlet("/servlet/Login")
配置fliter可以在web.xml中这样写:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.zy.filter.UserLoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
或者不配置web.xml在filter中写注解:
@WebFilter(filterName="/MyFilter",urlPatterns="/servlet/*")
即在所有想过滤的servlet名字前加上“/setvlet”在过滤的时候过滤路径就可以写成“/servlet/*”这样就能过滤所有的Servlet。
10. JAVA过滤器ServletRequest如何转换成HttpServletRequest
问题1:
org.apache.catalina.connector..servlet.http.HttpServletRequest
错误提示似乎挺明显的了,说一个类型不能强制转化为另一个类型。
待转型类型是:org.apache.catalina.connector.ResponseFacade
目标类型是:javax.servlet.http.HttpServletRequest
我想你应该看出来了,ResponseFacade -->HttpServletRequest肯定是不行的?
也就是说你是用的那个arg1肯定是一个response,你写错了而已。
改过来就好。也建议你把arg这种的参数名字写作res或者rep比较容易识别,并且可以提高代码可读性的变量名。
问题2:
关于过滤器实现地址的拦截,那么首先获得请求的地址,也就是通过request对象,它有好多个获得url的不同不同部分的方法。比如可以使用getServletPath()方法获得请求的路径,然后判断是否合法,不合法跳转到指定页面,合法那么继续chain.doFilter()。