用过滤器 +Session 会话权限控制详解
一、登陆后在UserServlet绑定session
代码如下:
if ("login".equals(op)) {
String userid = request.getParameter("name");
String pwd = request.getParameter("pwd");
user.setEuUserId(userid);
user.setEuPassword(pwd);
EasybuyUser user2 = ub.login(user);
if (user2 == null) {
request.setAttribute("error", "登录失败");
request.getRequestDispatcher("index.jsp").forward(request,
response);
} else {
session.setAttribute("user", user2);
request.setAttribute("user" ,user2);
request.getRequestDispatcher("main.jsp").forward(request, response);
}
}
二、在过滤器获取url控制权限
代码如下:
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
//强转 得到HttpServletRequest 和 HttpServletResponse
HttpServletRequest request = (HttpServletRequest) arg0;
HttpServletResponse response = (HttpServletResponse) arg1;
HttpSession session = request.getSession();
//获得url eg:RoleServlet?op=torolelist
String url = request.getServletPath() + "?" + request.getQueryString();
//System.out.println(url);
//判断:排除筛选首页和提交登陆页
if (!"/index.jsp?null".equals(url) && !"/UserServlt?op=login".equals(url)) {
//session中存入user
if (session.getAttribute("user") == null) {
request.setAttribute("error", "请登录");
request.getRequestDispatcher("index.jsp").forward(request,response);
} else {
arg2.doFilter(request, response);
}
} else {
arg2.doFilter(request, response);
}
}
- /**
- * 1,doFilter的第一个参数为ServletRequest对象。此对象给过滤器提供了对进入的信息(包括
- * 表单数据、cookie和HTTP请求头)的完全访问。第二个参数为ServletResponse,通常在简单的过
- * 滤器中忽略此参数。最后一个参数为FilterChain,此参数用来调用servlet或JSP页。
- */
三、在过滤器中获得url的几种方式:
假定你的web application 名称为news,你在浏览器中输入请求路径: http://localhost:8080/news/main/list.jsp 则执行下面向行代码后打印出如下结果: 1、 System.out.println(request.getContextPath()); 打印结果:/news 2、System.out.println(request.getServletPath()); 打印结果:/main/list.jsp 3、 System.out.println(request.getRequestURI()); 打印结果:/news/main/list.jsp 4、 System.out.println(request.getRealPath("/")); 打印结果: F:\Tomcat 6.0\webapps\news\test eg:RoleServlet?op=torolelist 5. request.getQueryString() 打印结果:op=torolelist 所以:request.getServletPath() + "?" + request.getQueryString() 打印结果:RoleServlet?op=torolelist