如何做登录后自动跳转到登录前要访问的页面
2007-07-19 15:13
471 查看
import java.io.IOException;
import java.net.URLEncoder;
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 com.ww.golf.bo.Player;
import com.ww.golf.util.ActionUtils;
public class LogFilter implements Filter {
protected FilterConfig filterConfig;
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
Player player = (Player) request.getSession().getAttribute(
ActionUtils.PLAYER_OBJ_KEY);
if (player == null) {
StringBuffer sUrl = new StringBuffer("");
if (request.getRequestURI() != null) {
sUrl
.append(URLEncoder.encode(request.getRequestURI(),
"UTF-8"));
}
if (request.getQueryString() != null) {
sUrl.append("?");
sUrl.append(URLEncoder
.encode(request.getQueryString(), "UTF-8"));
}
System.out.println("URL:" + sUrl);
response.sendRedirect("../index.jsp?" + ActionUtils.GO_URI_KEY
+ "=" + sUrl.toString());
} else {
chain.doFilter(request, response);
}
}
public void setFilterConfig(final FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
}
再于应用的web.xml中配置这个Filter
<filter>
<filter-name>logf</filter-name>
<filter-class>com.ww.golf.filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logf</filter-name>
<url-pattern>/player/*</url-pattern>
</filter-mapping>
这个代码的功能就是说:当访问 localhost:8080 / test / player / 目录里的页面(假设是登陆后显示的所有页面), 会经过Filter , 然后验证session , 如果未登陆或超时,,就回到登陆页面,,并把要访问的路径(比如 / player / userinfo.jsp?id=111 ) 发到登陆页面, 登陆页面用一个hidden标签记录下来, 并同用户名和密码一起提交到struts的Action 。验证通过后, Action 就直接跳到访问路径userinfo.jsp 。
写这个代码的时候,request.getRequestURI 只能获取不带参数的请求,如"userinfo.jsp?id=111"只能得到"userinfo.jsp" ,参数就丢了,等自动跳转了再执行是会报错的。后来查了一些文章才想起 request.getQueryString()就是用来获取请求中参数的。两者得一起用。哎,真是“基础不牢,越学越忘”。有功夫还得好好找点基础资料来看了。
import java.net.URLEncoder;
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 com.ww.golf.bo.Player;
import com.ww.golf.util.ActionUtils;
public class LogFilter implements Filter {
protected FilterConfig filterConfig;
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
public void doFilter(ServletRequest srequest, ServletResponse sresponse,
FilterChain chain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
Player player = (Player) request.getSession().getAttribute(
ActionUtils.PLAYER_OBJ_KEY);
if (player == null) {
StringBuffer sUrl = new StringBuffer("");
if (request.getRequestURI() != null) {
sUrl
.append(URLEncoder.encode(request.getRequestURI(),
"UTF-8"));
}
if (request.getQueryString() != null) {
sUrl.append("?");
sUrl.append(URLEncoder
.encode(request.getQueryString(), "UTF-8"));
}
System.out.println("URL:" + sUrl);
response.sendRedirect("../index.jsp?" + ActionUtils.GO_URI_KEY
+ "=" + sUrl.toString());
} else {
chain.doFilter(request, response);
}
}
public void setFilterConfig(final FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public void destroy() {
this.filterConfig = null;
}
}
再于应用的web.xml中配置这个Filter
<filter>
<filter-name>logf</filter-name>
<filter-class>com.ww.golf.filter.LogFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>logf</filter-name>
<url-pattern>/player/*</url-pattern>
</filter-mapping>
这个代码的功能就是说:当访问 localhost:8080 / test / player / 目录里的页面(假设是登陆后显示的所有页面), 会经过Filter , 然后验证session , 如果未登陆或超时,,就回到登陆页面,,并把要访问的路径(比如 / player / userinfo.jsp?id=111 ) 发到登陆页面, 登陆页面用一个hidden标签记录下来, 并同用户名和密码一起提交到struts的Action 。验证通过后, Action 就直接跳到访问路径userinfo.jsp 。
写这个代码的时候,request.getRequestURI 只能获取不带参数的请求,如"userinfo.jsp?id=111"只能得到"userinfo.jsp" ,参数就丢了,等自动跳转了再执行是会报错的。后来查了一些文章才想起 request.getQueryString()就是用来获取请求中参数的。两者得一起用。哎,真是“基础不牢,越学越忘”。有功夫还得好好找点基础资料来看了。
相关文章推荐
- 如何做登录后自动跳转到登录前要访问的页面
- asp.net如何让未登录用户登录后能自动跳转到登录前访问的页面
- PHP 登录完成后如何跳转上一访问页面
- 在ASP.NET登录页面中如何实现文本框焦点自动跳转及通过回车键提交表单
- PHP 登录完成后如何跳转上一访问页面
- 当客户访问一个需登陆的页面时会转到登陆页面,当客户登陆成功后会自动跳转到客户登陆前的那个页面,请问该如何实现?
- 判断用户是否已登录,未登录用户禁止访问任何页面或action,自动跳转到登录页面
- java servlet 几种页面跳转的方法,需要的朋友可以参考一下 在访问网页的过程中,页面自动刷新、跳转和重定向是经常用到的,这里就说说在Java中是如何实现这些功能的! 一、页面自动刷新
- J2EE实现登录后自动跳转到登录前访问的页面
- PHP 登录完成后如何跳转上一访问页面
- 在asp.net 中 如何在登录成功后2秒内自动跳转到登录前的页面
- 判断用户是否登录,用户在没有登录访问页面时,自动跳转到登录页面(二)
- PHP 登录完成后如何跳转上一访问页面
- PHP 登录完成后如何跳转上一访问页面
- 手机访问网站如何自动跳转到手机版本自动转到手机网站
- javaWeb项目用过滤器filter实现登陆成功后才能访问主页面,否则直接输入主页面的地址自动跳转到登陆界面
- 网页中如何n秒中,u自动跳转到其他页面
- jquery ajax方法调用在session超时以后如何跳转到登录页面?
- 如何做一个自动跳转的SharePoint页面?
- 登陆后自动跳转到登录前页面