我的目录结构如下
admin 目录
user 目录
index.jspindex.jsp是登陆页面,我需要控制:
1、当未登录的情况下,只能访问index.jsp
2、登陆后可以访问user目录,admin目录仍然不允许访问请问过滤器应该怎么写,谢谢各位

解决方案 »

  1.   

    用目录过滤吧,或者在过滤器中,判断url符合条件的,放行
      

  2.   

    switch(status){//status 判断是否登录,登录后用户拥有的权限
    case 1://user root
     req.getRequestDispatcher("/user/***.jsp").forward(req, res)
    case 2://admin root
    req.getRequestDispatcher("/admin/***.jsp").forward(req, res)
    case 3://is login
    req.getRequestDispatcher("/index.jsp").forward(req, res)
    }
      

  3.   


    /admin/***.jsp 星号代表通配符吗,还是只是示意
    如果不是通配符,那如果有N个页面怎么办呢
      

  4.   

    import java.io.IOException;
    import java.util.List;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;
    import javax.servlet.http.HttpSession;import org.apache.log4j.Logger;import com.iwit.noteService.bean.Admin;
    import com.iwit.noteService.bean.Function;
    import com.iwit.noteService.dao.DaoFactory;/**
     *
     * @author luhang E-mail:[email protected]
     * @version 创建时间:Aug 27, 2009 3:29:53 PM
     * 
     */
    public class PageFilter implements Filter{
    Logger log = Logger.getLogger(PageFilter.class);

    private FilterConfig filterConfig; private FilterChain chain; private HttpServletRequest request; private HttpServletResponse response;

    private HttpSession session; public void init(FilterConfig filterConfig) throws ServletException {
    } public void destroy() {
    } public void doFilter(ServletRequest servletRequest,
    ServletResponse servletResponse, FilterChain chain)
    throws IOException, ServletException {
    // 传递控制到下一个过滤器
    //chain.doFilter(request, response); this.chain = chain; this.request = (HttpServletRequest) servletRequest;

    request.setCharacterEncoding("GBK"); // 如果处理HTTP请求,并且需要访问诸如getHeader或getCookies等在ServletRequest中无法得到的方法,就要把此request对象构造成HttpServletRequest this.response = ((HttpServletResponse) servletResponse); // 获取当前页面文件名此处url为:/Gzlkh/login.jsp String url = request.getRequestURI();
    // 此处截取的url为:login.jsp url = url.substring(url.lastIndexOf("/") + 1, url.length());
    //log.info("JSP:"+url);
    try { // 排除后台不作权限控制的页面名 // 登陆页面无需验证文件 this.session = request.getSession(); // 获取网站访问根目录 String accessPath = request.getContextPath();// Admin admin = (Admin) session.getAttribute("admin"); if (noFileUrl(url, request)) { // 不需要判断权限的请求如登录页面,则跳过
    log.info("Pass:"+url);
    chain.doFilter(request, response); } else if (session.getAttribute("admin") == null) {//判断是否登陆
    log.info("Unlo:"+url);
    response.sendRedirect(accessPath + "/index.jsp");// 返回登陆页面(未登录或超时) } else {//如果已经登陆,则开始判断权限
    verifyUrl("@"+url);// 判断当前user是否拥有访问此url的权限 } } catch (Exception sx) { sx.printStackTrace(); } } /**
     * 
     * @param url
     * 
     * 当前请求的url
     * 
     * @param user
     * 
     * 当前登录用户
     * 
     * @throws IOException
     * 
     * @throws ServletException
     * 
     */ private void verifyUrl(String url) throws IOException,
    ServletException {

    String methodAtURL=(String)session.getAttribute("methodAtURL");
    log.debug(methodAtURL);
    if (methodAtURL!=null && methodAtURL.indexOf(url) >= 0) {
    log.info("Acce:"+url);
    chain.doFilter(request, response);
    } else {
    log.info("Forb:"+url);
    response.setContentType("text/html;charset=GBK");
    response.getWriter().println("<div style='margin: 100 auto;text-align: center;background-image:url(images/bg.jpg); " + "font: bold 18px 宋体;color: #0066CC;vertical-align: middle'> Sorry,您没有权限访问该资源!</div>"); } } /**
     * 
     * 是否需要判断权限,如客户端浏览、登录页面则不需要判断权限
     * 
     */ protected boolean noFileUrl(String url, HttpServletRequest request) { String exclude = "index.jsp"; if (exclude.indexOf(url) >= 0) { return true;// 不需要判断 } return false; }
    }这是我正在用作权限判断的一个JSP页面过滤器~
      

  5.   

    http://blog.163.com/li_205213/blog/static/117896793200981344847516/?mode=edit你看看
      

  6.   

    Tomcat4不是5以后貌似不支持根据文件过滤了 只支持目录过滤了 你可以把你的文件集中放到一个目录下去