web.xml 配置Filter

下面是该Filter的源代码。

程序清单:codes/02/2.12/ filterTest/WEB-INF/src/lee/AuthorityFilter.java

 

public class AuthorityFilter implements Filter { //FilterConfig可用于访问Filter的配置信息 private FilterConfig config; //实现初始化方法 public void init(FilterConfig config){ this .config = config; } //实现销毁方法 public void destroy(){ this .config = null ; } //执行过滤的核心方法 public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws IOException,ServletException{ //获取该Filter的配置参数 String encoding = config.getInitParameter("encoding" ); String loginPage = config.getInitParameter("loginPage" ); String proLogin = config.getInitParameter("proLogin" ); //设置request编码用的字符集 request.setCharacterEncoding(encoding); //① HttpServletRequest requ = (HttpServletRequest)request; HttpSession session = requ.getSession(true ); //获取客户请求的页面 String requestPath = requ.getServletPath(); //如果session范围的user为null,即表明没有登录 //且用户请求的既不是登录页面,也不是处理登录的页面 if ( session.getAttribute( "user" ) == null && !requestPath.endsWith(loginPage)& & !requestPath.endsWith(proLogin)){ //forward到登录页面request.setAttribute("tip" , "您还没有登录"); request.getRequestDispatcher(loginPage).forward(request, response);} else { //“放行”请求 chain.doFilter(request, response); } } }



上面Filter的doFilter方法里3行斜体字代码用于获取Filter的配置参数,而程序中粗体字代码则是此Filter的核心,①号代码按配置参数设置了request编码所用的字符集,接下来的粗体字代码判断session范围内是否有user属性——没有该属性即认为没有登录,如果既没有登录,而且请求地址也不是登录页和处理登录页,系统直接跳转到登录页面。

在web.xml文件中配置该Filter,使用init-param元素为该Filter配置参数,init-param可接受如下两个子元素:

param-name:指定参数名。

param-value:指定参数值。

该Filter的配置片段如下:
<!-- 定义Filter --> <filter> <!-- Filter的名字 --> <filter-name>authority</filter-name> <!-- Filter的实现类 --> <filter-class>lee.AuthorityFilter</filter-class> <!-- 下面3个init-param元素配置了3个参数 --> <init-param> <param-name>encoding</param-name> <param-value>GBK</param-value> </init-param> <init-param> <param-name>loginPage</param-name> <param-value>/login.jsp</param-value> </init-param> <init-param> <param-name>proLogin</param-name> <param-value>/proLogin.jsp</param-value> </init-param> </filter> <!-- 定义Filter拦截的URL地址 --> <filter-mapping> <!-- Filter的名字 --> <filter-name>authority</filter-name> <!-- Filter负责拦截的URL --> <url-pattern>/*</url-pattern> </filter-mapping>

 


上面配置片段中粗体字代码为该Filter指定了3个配置参数,指定loginPage为/login.jsp,proLogin为/proLogin.jsp,这表明:如果没有登录该应用,普通用户只能访问/login.jsp和/proLogin.jsp页面。只有当用户登录该应用后才可自由访问其他页面。

 

 

<servlet>
    <servlet-name>action<servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
        <param-name>config</param-name>
        <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>

    <init-param>
        <param-name>detail</param-name>
        <param-value>2</param-value>
    </init-param>

    <init-param>
        <param-name>debug</param-name>
        <param-value>2</param-value>
    </init-param>
    <load-on-startup>2</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
</servlet-mapping>




<load-on-startup>2</load-on-startup>配置的作用
1)load-on-startup元素标记容器是否在启动的时候就加载这个servlet(实例化并调用其init()方法)。
2)它的值必须是一个整数,表示servlet应该被载入的顺序
3)当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet;
4)当值小于0或者没有指定时,则表示容器在该servlet被选择时才会去加载。
5)正数的值越小,该servlet的优先级越高,应用启动时就越先加载。
6)当值相同时,容器就会自己选择顺序来加载。

本文来自CSDN博客,转载出处:http://blog.csdn.net/doymm2008/archive/2009/11/09/4791435.aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值