web.xml 配置Filter

来源:互联网 发布:steam 知乎 编辑:程序博客网 时间:2024/05/01 13:19

转载来自L: http://blog.csdn.net/doymm2008/article/details/4791435

下面是该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页面。只有当用户登录该应用后才可自由访问其他页面。


0 0