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

处理登录后跳转到之前受保护的页面:
在我们上网的时候,经常会遇到有些页面是受保护的,也就是需用先登录了以后才能访问到该页面
当我们没登录直接访问这些受保护的页面的时候,系统会自动跳转到登录页面
然后我们登录成功以后,系统就又会自动跳转到之前受保护的页面
那么这种功能效果是怎么做出来的呢。其实很简单,我们在跳转到登录页面把之前页面的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>

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值