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