当前位置:首页 > 开发 > 互联网 > 正文

web中登录后返回之前受保护页面

发表于: 2014-04-15   作者:dyy_gusi   来源:转载   浏览次数:
摘要: 处理登录后跳转到之前受保护的页面:在我们上网的时候,经常会遇到有些页面是受保护的,也就是需用先登录了以后才能访问到该页面当我们没登录直接访问这些受保护的页面的时候,系统会自动跳转到登录页面然后我们登录成功以后,系统就又会自动跳转到之前受保护的页面那么这种功能效果是怎么做出来的呢。其实很简单,我们在跳转到登录页面把之前页面的URL记录下来这里的记录有两种方式,一种是直接记录在session中,一种是

处理登录后跳转到之前受保护的页面:
在我们上网的时候,经常会遇到有些页面是受保护的,也就是需用先登录了以后才能访问到该页面
当我们没登录直接访问这些受保护的页面的时候,系统会自动跳转到登录页面
然后我们登录成功以后,系统就又会自动跳转到之前受保护的页面
那么这种功能效果是怎么做出来的呢。其实很简单,我们在跳转到登录页面把之前页面的URL记录下来
这里的记录有两种方式,一种是直接记录在session中,一种是以一个参数传递给将这个URL传递给登录页面
当登录成功以后,再跳回这个记录的这个URL就可以了
但是需要注意之前的页面可能有参数,我们需要把人家的参数也一同保存起来。

下面就看一个小例子:
1、首先是两个受保护的页面protectedPage1.jsp和protectedPage2.jsp

<body>
    this is first protected page.
    <br>
    <%
        String user = request.getParameter("user");
        out.print("user=" + user);
    %>
</body>

 

<body>
    this is second protected page.
    <br>
    <%
        String two = request.getParameter("two");
        out.print(two);
    %>
    <br>
    <%
        String user = request.getParameter("user");
        out.print("user=" + user);
    %>
</body>

 

2、然后是登录页面login.jsp

<body>
    <form action="/recoveryPage/ToProtectedServlet" method="post">
        userName:<input type="text" name="user"> <input type="submit"
            value="submit">
    </form>
</body>

 

3、到达两个受保护页面的Servlet,FirstServlet.java和SecondServlet.java
其中使用到了URLUtil这个工具类,下面会有这个工具类的说明

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    String user = request.getParameter("user");
    if (user == null || "".equals(user)) {
        session.setAttribute("newURL", URLUtil.dealURL("WEB-INF/jsp/protectedPage1.jsp"));
        request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response);
        return;
    }

    request.setAttribute("user", user);
    request.getRequestDispatcher("WEB-INF/jsp/protectedPage1.jsp").forward(request, response);
}

 

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    HttpSession session = request.getSession();
    String two = request.getParameter("two");
    String user = request.getParameter("user");
    if (user == null || "".equals(user)) {
        session.setAttribute("newURL", URLUtil.dealURL("WEB-INF/jsp/protectedPage2.jsp?two=" + two));
        request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response);
        return;
    }

    request.setAttribute("user", user);
    request.getRequestDispatcher("WEB-INF/jsp/protectedPage2.jsp?two=" + two).forward(request, response);
}

 

4、处理登录页面的Servlet

HttpSession session = request.getSession();
String newURL = (String) session.getAttribute("newURL");
String oldURL = URLUtil.getURL(newURL);
System.out.println("oldURL=" + oldURL);
String user = request.getParameter("user");
if (user == null || "".equals(user)) {
    request.getRequestDispatcher("WEB-INF/jsp/loginPage.jsp").forward(request, response);
    return;
}
String newOldURL = URLUtil.appendArges(oldURL, new String[] { "user=" + user });
System.out.println("newOldURL" + newOldURL);
request.getRequestDispatcher(newOldURL).forward(request, response);

 

5、URL处理工具类
注意:上面使用的是session传递保护页面的地址,所以我们不用对保护页面的URL进行处理
但是如果是在参数中传递一个url的参数对象,那么我们就需要对保护页面的URL处理,
需要将原来的URL中的?和&符合替换,不然会导致跳转到登录页面的URL错误。(一个URL不能有多个?)
这里的替换很简单,可以使用其他字符换掉?和&就可以了,在获得保护页面的URL的时候,再替换回来就行

public class URLUtil {
    public static String dealURL(String oldURL) {
        String newURL = oldURL;
        return newURL;
    }

    public static String getURL(String newURL) {
        String oldURL = newURL;
        return oldURL;
    }

    public static String appendArges(String url, String[] arges) {
        if (url.indexOf("?") == -1) {
            url = url + "?" + arges[0];

        } else {
            url = url + "&" + arges[0];
        }
        for (int i = 1; i < arges.length; i++) {
            url = url + "&" + arges[i];
        }
        String newOldURL = url;
        return newOldURL;
    }
}

 
其他的一些配置就不贴了,比如Servlet的映射等等。
这个时候我们可以进行测试:

<html>
<body>
    <h2>
        <a href="/recoveryPage/FirstServlet">to one protected page</a><br>
        <a href="/recoveryPage/SecondServlet?two=2">to two protected page</a>
    </h2>
</body>
</html>

 

好了,这样就可以完成上面说的功能了。

web中登录后返回之前受保护页面

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
登录页是用户进入网站的入口,就像是我们进家、进公司的“门”一样。 试想我们处在一个四周都是门的
最近工作中遇到一种word文档,以前没有见过。打开word文档,不能进行任何的编辑操作,只能看。这个
本人在看《J2EE核心模式》(“Core J2ee Patterns”,刘天北、熊节译),里面提到了一种实现资源保
用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好的门
出处:http://cdc.tencent.c 现在越来越多的大型网站把登录和首页放在一起设计,由此可见登录页面的
实现 java web 页面的登录验证 本案例中的程序主要通过 java jdbc-odbc 驱动连接 sql2000 数据库 ,
  用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好
  用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好
用户活跃度是检验产品成功与否的重要指标之一,传统行业的商家极为重视门面的装潢,因为一个好的门
Extjs刷新时会移除所有数据,然后进行数据的重新请求并展现。 所谓刷新时保留在当前页面就是在reloa
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号