Servlet 返回登录前页面

来源:互联网 发布:js 上传与下载文件 编辑:程序博客网 时间:2024/05/16 09:02

用servlet实现网站时,点击进入需要登录验证的网站就会跳转到登陆页面,那么登录完成后如何跳转回登陆前界面呢?

有两种实现方法

一种是把登陆前地址添加在url后面

另一种是通过session.setAttrubute()把地址添加在session里


我使用的是第一种方法


首先需要一个过滤未登录用户的filter(过滤器)

在过滤器的doFilter( )中加入

/*** @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)*/public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest) request;String requestUri = req.getRequestURI();if (req.getSession().getAttribute("login") != null) {//判断是否已登录// pass the request along the filter chainchain.doFilter(request, response);}else {HttpServletResponse res = (HttpServletResponse) response;if (!requestUri.endsWith("index.jsp")) {//登陆前页面不是主页才需要记录String requestPara = req.getQueryString();String requestUrl;if (requestPara != null)requestUrl = URLEncoder.encode(requestUri + "?" + requestPara, "GBK")<span style="white-space:pre"></span>elserequestUrl = URLEncoder.encode(requestUri, "GBK");res.sendRedirect("login.jsp?returnUrl=" + requestUrl);} else {res.sendRedirect("login.jsp");}}}


注意:

例如发送请求的页面为 http://localhost:8080/yourproject/page.jsp?para1=xx&para2=xx,request.getRequestURI()就会返回 /yourproject/page.jsp ,request.getQueryString()就会返回para=xx&para2=xx 。

将url参数添加进url中需要用URLEncoder和URLDecoder对参数进行编码和解码。



登陆页面login.jsp

<form method='post' action='login.do?<%= request.getQueryString()%>'>名称:<input type='text' name='username'>密码:<input type='password' name='password'><input type='submit' value='登入'></form>
因为在filter使用了sendRedirect(),所以需要在action=‘login.do'(处理登陆的servlet)后加上参数,否则servlet获取不了参数

最后只要在login servlet中
String returnUrl = request.getParameter("returnUrl");if (!returnUrl.equals("null")) {<span style="white-space:pre"></span>returnUrl = URLDecoder.decode(returnUrl, "GBK");}
将跳转的页面设为returnUrl就可以完成跳转到登录前页面的功能了。






0 0
原创粉丝点击