登陆权限判断
登陆, 提交到登陆Servlet处理其业务!
登陆成功, 跳转到首页,显示欢迎信息 + 列表信息
登陆失败,跳转到登陆!
要求:
只有登陆后,才可以访问首页, 显示列表
如果没有登陆,直接访问首页列表,要跳转到登陆!
实现思路:
1.Login.jsp 登陆页面
2.List.jsp 列表显示
3.LoginServlet.java 登陆处理servlet
4.ListServlet.java 首页列表查询Servlet
5.LoginFilter.java 登陆验证过滤器
能直接访问的链接有:
http://localhost:8080/contactSystem/login.jsp
http://localhost:8080/contactSystem/LoginServlet
不能直接访问的链接有:
http://localhost:8080/contactSystem/ListServlet
http://localhost:8080/contactSystem/list.jsp
核心过滤器代码:
但是此过滤器有问题:
①页面用了js和css,也会被拦截,所以通过截取uri来判断这样不妥。
②但登录成功后再直接访问list.jsp,能进入,而且是空数据。
所以此代码仅供过滤器写法作参考。
package com.cn.filter;
import java.io.IOException;
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 javax.servlet.http.HttpSession;
/**
* 登录验证过滤器
* @author liuzhiyong
能直接访问的链接有:
http://localhost:8080/contactSystem/login.jsp
http://localhost:8080/contactSystem/LoginServlet
不能直接访问的链接有:
http://localhost:8080/contactSystem/ListServlet
http://localhost:8080/contactSystem/list.jsp
*/
public class LoginFilter implements Filter{
/**
* 拦截业务逻辑:
* 1.先指定放行的资源,哪些资源不需要拦截:
* login.jsp + /LoginServlet (request对象可以获取)
* 2.获取session,从session中获取用户信息userInfo
* 3.再判断用户信息是否为空
* 为空,说明没有登录,跳转到登录
* 不为空,已经登录,放行
*/
@Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
//转型
HttpServletRequest request = (HttpServletRequest)req;
HttpServletResponse response = (HttpServletResponse)res;
//获取到请求的uri
String uri = request.getRequestURI();
System.out.println("=======拦截的uri=========="+uri);
//先判断指定放行的资源,给予放行:
if(uri.equals(request.getContextPath()+"/LoginServlet") || uri.equals(request.getContextPath()+"/login.jsp")
|| uri.equals(request.getContextPath()+"/css/login.css") || uri.equals(request.getContextPath()+"/js/login.js")
|| uri.equals(request.getContextPath()+"/js/jquery-1.8.2.js")){
//放行
chain.doFilter(request, response);
}else{//拦截其它资源
//获取session,从session中获取用户信息userInfo
HttpSession session = request.getSession(false);//注意这里填上参数false,以免自己创建
if(session != null){
//从session中获取用户信息userInfo
Object userInfo = session.getAttribute("userInfo");
//判断用户信息是否为空
if(userInfo == null){//没有登录,跳转到登录
request.getRequestDispatcher("/login.jsp").forward(request, response);
}else{//已经登录,放行
chain.doFilter(request, response);
}
}else{//session为空,说明也没有登录,跳到登录
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}