Tomcat6 限制来源URL

因公司需要,内部网站要求只能通过OA登录,所以要做限制,服务器上做的是apache+tomcat环境

经测试,由Tomcat负责解析的部份,apache的httpd服务器什么都不管,尽管我对那个目录做了限制。它也不理。

所以,只好打Tomcat的注意了,,,嘿

于是上网搜索到解决方案如下:

 

****************************************************

 

<Context path="/weba" debug="0" privileged="true" reloadable="true"

 docBase="weba">

 <Valve className="org.apache.catalina.valves.RemoteHostValve" 

 allow="192.168.*.*"/> 

 <Valve className="org.apache.catalina.valves.RemoteAddrValve" 

 deny="192.168.*.*"/> 

</Context>

其实还可以用域名,类似如下:

 <Context path="/examples" ...> 

 ... 

 <Valve className="org.apache.catalina.valves.RemoteHostValve" 

 allow="*.mycompany.com,www.yourcompany.com"/> 

 <Valve className="org.apache.catalina.valves.RemoteAddrValve" 

 deny="192.168.*.*"/> 

 ... 

 </Context>

 

****************************************************

 

我以为RemoteHostValve就是限制来源URL的,因为上面写的是域名,于是杯具了。。。

上面代码经测试,,只能限制IP,查看RemoteHostValve源码可知,它获取的是request.getRequest().getRemoteHost() 并不是我所想像的request.getHeader("referer")

 

所以,只能自己写一个valves了,可是我又懒,于是又在网上搜到如下代码:

 

package org.apache.catalina.valves;

 

import java.io.*;

import javax.servlet.*;

 

import org.apache.catalina.connector.*;

 

/**

 * <p>

 * Title: Request Header Filter For Tomcat

 * </p>

 * <p>

 * Description: eg: set follow coment in ${catalina.home}/conf/server.xml:

 * <Valve className="org.apache.catalina.valves.RequestHeaderValve"

 * header="User-Agent" deny="*httunit*"/> then you can forbidden someone use

 * httpunit to Access the Engine ,Host or Context or: <Valve

 * className="org.apache.catalina.valves.RequestHeaderValve" header="Referer"

 * deny="*.mydomain.com, *localhost*"/> then you can forbidden someone open the

 * link from *.mydomain.com or localhost

 * </p>

 * <p>

 * Copyright: Apache License Version 2.0

 * </p>

 * <p>

 * Company: lizongbo

 * </p>

 * 

 * @author lizongbo @ gmail.com

 * @version 1.0

 */

public final class RequestHeaderValve extends RequestFilterValve {

private String header = "";

 

public void invoke(Request request, Response response) throws IOException,

ServletException {

String headervalue = request.getRequest().getHeader(getHeader());

headervalue = headervalue != null ? headervalue : "";

process(headervalue, request, response);

}

 

public String getHeader() {

return header;

}

 

public void setHeader(String header) {

this.header = header;

}

}

 

 

将上面代码编译后,复制到%TOMCAT_HOME%/lib/org/apache/catalina/valves 目录内

 

然后要配置虚拟主机

 

server.xml 部分配置样例如下:

 

<Host name="www.faw-logi.com" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

 

       <Alias>faw-logi.com</Alias>

       <Alias>faw-wl.com</Alias>

       <Alias>www.faw-wl.com</Alias>

       <Alias>faw-logistics.com</Alias>

       <Alias>www.faw-logistics.com</Alias>

   <Context path="" docBase="x:/xxx/www.faw-logi.com" />

   <Context path="/xxxx" docBase="x:/xxx/peixun.faw-logi.com">

<Valve className="org.apache.catalina.valves.RequestHeaderValve" allow="[/S]*faw-[/S]*" header="referer"/>

   </Context>

      </Host>

 

注意上面配置中的:header="referer"  referer也可以改成别的,只要是header信息里的就OK,,这样很灵活吧。。呵呵,不过这代码可不是我写的

代码来源地址:http://www.360doc.com/content/05/0830/10/717_9339.shtml

 

重启tomcat,测试,,搞定,,哈哈,折腾了一天,终于有结果了。。。

 

另外,JAVA的正则中 ^http://xxx  这样写居然不匹配,,也不知道是我写错了,还是它根本就不支持。。。。

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Tomcat 是一个常用的 Java Web 服务器,可以用来部署和运行 Java Web 应用程序。为了保护应用程序和服务器的安全性,Tomcat 提供了一些访问限制的功能。 1. IP 地址限制:可以通过配置 Tomcat 的 `conf/web.xml` 文件来限制允许访问 Tomcat 的 IP 地址范围。在 `<web-app>` 标签内添加如下配置: ```xml <security-constraint> <web-resource-collection> <web-resource-name>Restricted</web-resource-name> <url-pattern>/*</url-pattern> </web-resource-collection> <auth-constraint> <role-name>admin</role-name> </auth-constraint> <user-data-constraint> <transport-guarantee>CONFIDENTIAL</transport-guarantee> </user-data-constraint> </security-constraint> <login-config> <auth-method>BASIC</auth-method> <realm-name>Restricted Area</realm-name> </login-config> <security-role> <role-name>admin</role-name> </security-role> ``` 上述配置将限制所有路径的访问,并要求用户提供 BASIC 认证的凭据才能访问。 2. 用户名和密码限制:可以通过配置 Tomcat 的 `conf/tomcat-users.xml` 文件来限制具有管理权限的用户。在 `<tomcat-users>` 标签内添加如下配置: ```xml <user username="admin" password="password" roles="manager-gui,admin-gui"/> ``` 上述配置将创建一个用户名为 "admin"、密码为 "password",具有 "manager-gui" 和 "admin-gui" 角色的用户。这些角色将授予用户访问 Tomcat 管理界面的权限。 请注意,以上只是简单介绍了 Tomcat 访问限制的一些方法,具体的配置取决于你的需求和环境。在实际应用中,你可能还需要考虑其他安全措施,如 SSL/TLS 加密、防火墙设置等,以确保服务器和应用程序的安全性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值