即防止用户在浏览器中直接访问需要登录才能访问的页面。有哪些方案,讨论一下

解决方案 »

  1.   

    登录用doPost()直接访问用doGet()
      

  2.   

    方法1、过滤器,利用Session识别用户是否登录。
    方法2、每个页面都包含同一个识别用户是否登录的Servlet或JSP片段,也要利用Session
    方法3、不用Session直接用Cookie也可以
    ...
      

  3.   

    用过滤器与Session相结合,可以解决!
      

  4.   

    过滤器 or session
    如果单看是否登录的话
      

  5.   

    自己在网上看了个好例子,按照自己的需要,修改一下,拿来分享,利用过滤器实现的。不过要注意一点,就是过滤器的执行顺序,是按照在web.xml中配置的先后顺序执行的。
    /*
     * 页面访问过滤器
     * 
     * 流程设计:
     * 1. 判断用户访问页面是否需要登录,不需要登录则直接前进,如果需要登录,则进行步骤2。
     * 2. 判断用户是否登录,登录则进行步骤3,否则跳转的登录页面。
     * 3. 判断用户是否拥有访问此页面的权限,拥有权限则显示页面,没有则提示用户没有访问权限。
     * 
     * 方法定义:
     * 1.public boolean isNeedLogin(String uri,HttpServletRequest req)  ——判断访问页面是否需要登录
     * 2.public boolean isLogin(HttpSession session)  ——判断用户是否登录
     * 3.public boolean hasPagePriviledge(String uri, HttpSession session)  ——判断是否拥有访问页面权限
     */核心方法:
    public void doFilter(ServletRequest request, ServletResponse response,
    FilterChain chain) throws IOException, ServletException {
    HttpServletRequest req = (HttpServletRequest)request;
    HttpServletResponse res = (HttpServletResponse)response;
    RequestDispatcher loginDispatcher = req.getRequestDispatche("login.jsp");
    RequestDispatcher denyDispatcher = req.getRequestDispatcher("common/noPriviledge.jsp");
    HttpSession session = req.getSession();
    String pageUri = req.getRequestURI();
    // System.out.println(pageUri);
    if(isNeedLogin(pageUri,req)){
    if(isLogin(session)){
    if(hasPagePriviledge(pageUri,session)){
    System.out.println("需要登录,拥有权限");
    chain.doFilter(request, response);
    }else{
    System.out.println("需要登录,但没权限");
    denyDispatcher.forward(request, response);
    }
    }else{
    System.out.println("需要登录,但没登录");
    loginDispatcher.forward(request, response);
    }
    }else{
    System.out.println("不需要登录");
    chain.doFilter(request, response);
    }
    }public boolean isNeedLogin(String uri,HttpServletRequest req){
    String freePage = req.getContextPath() + "/login.jsp";
    return !freePage.contains(uri);
    }

    public boolean isLogin(HttpSession session){
    Object loginUser = session.getAttribute("loginUser");
    if(null != loginUser && !"".equals(loginUser)){
    return true;
    }else{
    return false;
    }
    }

    public boolean hasPagePriviledge(String uri, HttpSession session){
    String priviledgeList = (String)session.getAttribute("priviledgeList");
    return priviledgeList.contains(uri);
    }