就及我有一个登录,登录成功页及welcome.jsp。。但我在地址栏里直接输入welcome.jsp也可以访问,,我如何当地址栏里输入welcome.jsp的时候他自动跳转到login.jsp页面中呢???我听说好像要用getRequestUrl来获取。。但不知道怎么弄。。请哪们仁兄帮个忙。说详细点。谢谢
[b]问题补充:[/b]
这样不是每次请求都是到login.jsp去了吗??如果用户打开了welcome.jsp,他再次打开的时候不是也是到login。jsp去了。。我就是要判断它session中有没有username。。我记得可以实现的。。。
[b]问题补充:[/b]
wangxuliangboy 你说的好像合我意了。。但那个dofilter写在哪啊??给我说详细下吧。谢谢了。。。我初学者!
[b]问题补充:[/b]
wangxuliangboy 哥们,有QQ没,,以后跟你多学习学习啊!可以发我邮箱。。。j2ee.net@hotmail.com
好点的解决方案就是加个filter,filter大概如下:
[code="java"]
public class RightFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
HttpServletResponse httpServletResponse = (HttpServletResponse) servletResponse;
User user = (User) httpServletRequest.getSession(true).getAttribute("user");
if (!isExcludePages(httpServletRequest.getRequestURI())) {
if (user == null) {
httpServletResponse.sendRedirect(httpServletRequest.getContextPath() + "/login.jsp");
return;
}
}
filterChain.doFilter(servletRequest, servletResponse);
}
private boolean isExcludePages(String url) {
return url.indexOf("login.dhtml") != -1
|| url.indexOf("logout.dhtml") != -1
|| url.indexOf("login.jsp") != -1
|| url.endsWith(".css")
|| url.endsWith(".js")
|| url.endsWith(".gif")
|| url.endsWith(".jpg")
|| url.endsWith(".png");
}
public void destroy() {
}
}
[/code]
需要在web.xml里面配置一下:
[code="xml"]
rightFilter
com.xxx.filter.RightFilter
rightFilter
*.dhtml
[/code]
不管访问什么页面,只要没登录就跳转到登录页面去。
welcome.jsp文件里面这样写就行了
[code="jsp"]
<%
response.sendRedirect(request.getContextPath()+"/login.jsp");
%>
[/code]
当然你要知道你的login.jsp的位置,request.getContextPath()得到的是根目录地址。
那就需要判断一下是不是有用户登录了,用户登录的时候你可以把用户信息比如整个User对象存到session里面,然后在welcome页面先判断一下用户是不是登录了
<%
session = request.getSession();
if(session.getAttribute("user") == null){
response.sendRedirect(request.getContextPath()+"/login.jsp");
}
%>
如果用户没有登录就跳转到登录页面。
LoginFilter
com.LoginFilter
LoginFilter
*.jsp
配置这样一个过滤器..在LoginFilter.doFilter方法
// 获得请求的路径
String requestURI = ((HttpServletRequest) request).getRequestURI();
通过请求的URI判断当前用户是否已经登陆.如果没有登陆的话.就跳到login.jsp..
如果用户输入的为login.jsp则不跳转
你的登录action要实现SessionAware接口,你的login方法大概是这样的
[code="java"]
protected Map session;
public void setSession(Map session) {
this.session = session;
}
public Map getSession() {
return session;
}
public String login() throws Exception {
User userLogin = userManager.login(user);
if (userLogin == null) {
addActionError("用户名或密码错误.");
return INPUT;
}
getSession().put("user", userLogin);
return SUCCESS;
}[/code]
public class LoginFilter implements Filter{
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
//你的代码写在这里
chain.doFilter(request, response); //继续走下一个Filter
}
}
}