利用Filter禁止直接访问JSP



一.应用Struts

Struts作为一种Web MVC框架,将视图展示和处理逻辑分离,降低耦合性,允许更改界面视图而不用重新编译逻辑部分,同样由于业务需求的改变需要调整逻辑结构而不用修改视图部分。由于灵活的配置,简单可操作性,在业界得到广泛的应用。用户通过配置Struts.xml文件,轻易建立视图和模型的映射关系。

Exmaple:

<package name=”Student” namespace=”/Student” extends=” struts-default”>
    <action name=”add” class=”com.struts.action.Student” method=”add”>
        <result>/Student_Add.jsp</result>
    </action>
    <action name=”add_test” class=”com.struts.action.Student” method=”add”>
	<result>/Student_Add.jsp</result>
    </action>
</package>

在Struts.xml配置文件中作出如上配置,用户在浏览器地址栏中输入http://xxx/Student/add时,实际上就是访问Student_Add.jsp,而访问http://xxx/Student/add_test  时实际也是访问Student_Add.jsp,执行的业务逻辑是com.struts.action.student类中的add方法。

二.访问JSP

在应用Struts框架的程序中通常是通过Action来访问资源,但是直接访问jsp也是可行的。Struts提供了许多Web元素来提高开发者的效率。在直接访问包含Struts Web元素的jsp页面时通常会引入异常,比如OGNL异常。有时出于安全性考虑,也会禁止用户直接访问jsp页面。

禁用用户直接访问jsp的方式有几种,既然项目使用Struts,我们应当采用和Struts一致的方式来实现。

三.Filter过滤JSP

我们知道Struts就是基于Filter来过滤拦截客户端request的,同样我们可以自定义Filter来实现特殊过滤,比如说过滤jsp请求。其语法格式如下:

Filter定义,包括名字和实际处理类。

<filter>
    <filter-name>URLfilter</filter-name>
    <filter-class>com.struts.filter.MyURLFilter</filter-class>
</filter>

Filter 过滤定义,包括名字和拦截的模式匹配<也可以是Servlet name>

<filter-mapping>
    <filter-name>URLfilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

Filter和其出于Web.xml的顺序是有关的,filter定义必须位于filter-mapping的前面,在多个url-pattern匹配的情况下,按照filter-mapping出现的先后顺序依次使用filter进行处理。因此拦截jsp的filter应当位于Struts filter前面。

下面来看filter处理类。

package com.struts.filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; 

public class MyURLFilter implements Filter{
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse res,
	FilterChain filterchan) throws IOException, ServletException {
        System.out.println("My filter begin to ");
	HttpServletRequest httpReq =(HttpServletRequest)req;
        //转换成HttpServletRequest,以获取包含的地址信息,请求的参数,提交的数据
	String Url = httpReq.getRequestURI();
	if(Url.endsWith(".jsp")){ //判断URL以jsp结尾
	    System.out.println(".jsp was filtered!");
	    HttpServletResponse httpRes =(HttpServletResponse)res;
	    System.out.println(httpReq.getContextPath());			
            httpRes.sendRedirect(httpReq.getContextPath()+"/Student/add/");
	    //重定向到某个action
	    return;
	}else{
	    filterchan.doFilter(req, res);
	}
    }

    public void init(FilterConfig arg0) throws ServletException {
	System.out.println("Myfilter init!");
    }
}

这样,所有对jsp的直接请求都会被拦截并重定向到某个action,通过action与jsp的映射来访问相应的jsp或html资源。

时间: 2024-08-07 04:31:06

利用Filter禁止直接访问JSP的相关文章

【Jsp】利用Application对象实现访问人数统计功能

利用Application对象实现访问人数的统计很常见,但是一些书籍讲解这一技术的时候,往往没有做完整.一旦服务器重启,由于Application会被销毁,重新建立,人数统计则会再一次从零开始.解决方法,个人认为,应该同时利用到数据库,这样无论服务器要重启或者遭遇到停机什么,被统计的人数还是会一直累计上去,不会丢失.下面就介绍一个例子,解决利用Application对象实现访问人数统计功能由于服务器重启或者停机而导致从零开始的问题,同时介绍如果利用Application对象把保存到web.xml

Nginx禁止ip访问或IP网段访问方法

Nginx禁止ip访问可以防止指定IP访问我们的网站,本例子可以实现是防止单IP访问或IP网段访问了,非常的有用我们一起来看看吧. 常用的linux做法 iptables参考规则  代码如下 复制代码 iptables -I INPUT -p tcp –dport 80 -m –mac-soruce$MAC -j DROP 基于mac地址的iptables -I INPUT -p tcp –dport 80 -s $IP -j DROP 基于ip地址的 方法一, 首先建立下面的配置文件放在ngi

LDAP禁止匿名访问

LDAP默认是允许用户匿名访问的,如下图:在使用工具连接时,勾选匿名绑定后,不需要输入UserDN和密码就可能连接到LDAP服务器,但是只能进行read及search操作.不能做任何的修改及删除操作. 禁止匿名访问的方法: 1.删除匿名访问控制指令 2.修改匿名访问控制指令(修改anyone为all) ==================================================================== 定义用户访问 - userdn 关键字 使用 userdn

JAVA–利用Filter和session防止页面重复提交

JAVA–利用Filter和session防止页面重复提交解决思路:1 用户访问表单页面,先经过过滤器,过滤器设置一个随机id作为token令牌, 并将该token放入表单隐藏域中.2 表单响应到浏览器,用户填充数据后提交请求;3 请求经过过滤器,过滤器获取表单中的令牌进行验证,如果和之前生成的令牌一致,则将请求放行,并且清空令牌;4 如果用户重复提交表单,请求经过过滤器,过滤器进行验证.因为第一次放行后令牌已经清空失效,令牌不一致,不放行.跳转到提醒界面. 需用知识:1 过滤器基础知识2 se

nginx 禁止ip访问只允许域名访问

nginx 禁止ip访问只允许域名访问 在nginx 配置文件中,再添加一个server段 server{listen 80 default;return 500;}

Apache禁止ip访问

网站突然让禁止ip访问,于是就通过配置Apache达到了想要的效果. 我们网站用的是Apache+tomcat集群,所以需要配置虚拟主机,虚拟主机我在这里就不说了,不明白的上网搜搜吧,这里只说禁止ip访问的配置,打开虚拟主机的配置文件httpd-vhosts.conf,我的路径是"d:/Apache2.2/conf/extra/httpd-vhosts.conf",在NameVirtualHost *:80后面添加: <VirtualHost *:80> ServerNam

tomcat限制用域名访问 禁止 ip访问

有时候会遇到服务器网站.只可以通过域名访问.而不允许ip访问.防止域名恶意解析,tomcat可以实现这个简单功能. 1,禁止ip访问项目 2,只允许绑定域名访问 环境:tomcat7  外网地址:114.113.100.166   域名:binge.com 打开tomcat的配置文件,server.xml,找到Engine节点修改如下: <Engine name="Catalina" defaultHost="www.binge.com">       

禁止IP访问和别人域名绑定或访问自己网站设置

下面的设置仅允许*.ms026.com和www.ms026.com绑定并访问主机NameVirtualHost *<VirtualHost *>ServerName default:80<Location />Order Allow,DenyDeny from all</Location></VirtualHost><VirtualHost *>DocumentRoot ../htdocs/gbServerName www.ms026.comSe

EasyUI+SpringMVC--Maven项目--WEB-INF安全目录访问jsp

每一个Maven工程的目录结构大都相同,这种目录结构称做Maven的标准目录结构.由于Maven是约定优于配置,根据模板直接生成webapp目录,故其默认的Webapp就是其发布目录.我们不需要再copy一份webcontent目录,如果再复制一份webcontent目录,需要在pom.xml里面配置,告诉Maven. 基于Maven约定优于配置,我们用其默认的文件夹目录,所有的jsp都放在了WEB-INF目录下,通过后台SpringMVC返回的界面,找不到返回的界面.这是为什么呢? WEB-I