我们大家都有使用博客或者其他类似系统的经验,往往都是通过用户验证以后,才进行其他的操作。
上一节,在处理完login事务以后,我们可以访问某个页面对自己的博文或者博文分类等等进行操作。
但是由于网页的关系,如果没有对每页进行用户认证,而我们知道准确的地址的话,我们可以直接访问地址来对数据进行操作。
比如:
http://localhost:8080/Blog/BlogServlet?method=list
可以查看所有的博文;而
http://localhost:8080/Blog/BlogServlet?method=delete&cid=1
这个地址可以对编号为1的博文进行删除操作。
所以我们必须对每一页或者没一次操作进行用户认证。因为user对象是放置在session中的,所有我们可以每次通过检测session内容来达到验证的效果。
在这里,我写了一个辅助类UserValidator,来简化操作。
package com.blog.utils;
import com.blog.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
*
* @author Chucky
*/
public class UserValidator {
public static boolean isValid(HttpServletRequest request){
HttpSession session = request.getSession();
User user = (User) session.getAttribute("user");
return user!=null?true:false;
}
}
一般Servlet的里面,可以直接把UserValidator的检验直接放置在processRequest方法里,如果检验失败的话,转到用户登录界面
1 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
2 throws ServletException, IOException {
3 response.setContentType("text/html;charset=UTF-8");
4 request.setCharacterEncoding("UTF-8");
5
6 String method = request.getParameter("method");
7
8 if (!UserValidator.isValid(request)) {
9 response.sendRedirect(request.getContextPath()+"/admin/");
10 } else {
11 if (method.equals("add")) {
12 add(request, response);
13 } else if (method.equals("delete")) {
14 delete(request, response);
15 } else if (method.equals("edit")) {
16 preEdit(request, response);
17 } else if (method.equals("update")) {
18 update(request, response);
19 } else if (method.equals("list")) {
20 list(request, response);
21 } else if (method.equals("get")) {
22 get(request, response);
23 } else if (method.equals("preAdd")) {
24 preAdd(request, response);
25 }
26 }
27 }
而一些直接读取的jsp页面,也可以把验证直接写在页面里。
<% User user = (User)session.getAttribute("user");
if (user == null){
response.sendRedirect(request.getContextPath()+"/admin/");
}
%>