摘要 在开发项目时,系统的安全问题是必须要考虑的。在Java Web中,运用JSP和Servlet技术可以很好的解决用户登录系统的身份验证和授权的安全问题。 关键词 Java Web;用户登录;安全问题
中图分类号TP312 文献标识码A 文章编号 1674-6708(2011)34-0195-02
网络安全问题一直是计算机行业的一个焦点问题。安全是一个永恒的问题,无论是什么样的应用程序,都需要一定级别的安全,尤其是在分布式环境下运行的系统。在企业级应用程序中,安全可以分为4层:身份验证层、授权层、数据完整层和保密层。这4层提高了应用程序的安全级别。
Web应用的组件主要包括视图、控制器和业务方法。业务方法通常是由控制器调用的,所以基本的安全控制主要是对视图和控制器的控制。
1 用户登录系统的过程分析
用户进入系统是通过登录功能来实现的,主要是通过用户名和密码来登录,有时为提高系统的安全级别,还会使用图形验证码、动态口令卡等辅助安全措施。用户在登录之后能够访问哪些资源是由用户的权限决定的。用户登录的时候,系统根据用户名可以获取用户的权限,根据用户的权限可以对用户能够操作的资源进行控制。这个控制包括对某个页面的控制、某个控制器的控制或者某一部分代码的控制。
2 用Servlet来实现用户登录功能
用户在进入系统时,系统会提供登录功能所需要的登录界面和处理文件,用户在登录界面中输入用户名和密码后,处理文件在获取用户输入的用户名和密码进行有效的验证,根据验证的结果分别做出相应的处理。当用户名和密码都正确后,系统要获取当前用户的权限,把用户信息和权限信息保存在session中,为之后的安全控制使用。当用户名和密码不正确后,则重新转向登录界面,并提示用户错误信息。
2.1 用户类的创建
用户在登录过程中应输入用户名和密码,并且根据用户的权限实现对系统的操作。根据面向对象的设计的方法,用户类应包含如下成员变量:
private String name;//用户名成员变量
private String password;//用户密码成员变量
private String type;//用户权限成员变量
对用户类成员变量进行赋值和获取值的方法采用getXXX()和setXXX()方法部分代码如下:
public String getName() //获取用户名成员变量值的方法
public void setName(String name) //对用户名成员变量进行赋值的方法
在用户类中还封装验证用户名和密码是否正确的方法,其方法名为:findUserByName(String name),它可以在数据库中查询出是否存在此用户。
2.2 Servlet现实用户登录功能
Servlet处理用户登录过程为:获取用户输入的用户名和密码,根据用户名调用模型的相应方法,根据返回值进行处理,如果返回值为null,则说明用户不存在。否则,判断密码是否正确,如果不正确,提示密码错误信息。如果正确,判断用户的权限。LoginServlet为登录Servlet文件,其doPost()方法的核心代码为:
String fd="login.jsp";;//转向文件
UserBean u=new UserBean();//创建用户对象
HttpSession se=req.getSession();//创建Session对象
UserBean user=u.findUserByName(req.getParameter("name"));///在数据库中查询用户
if(user==null){
se.setAttribute("info", "用户不存在");
}else if(!user.getPassword().equals(req.getParameter("password"))){密码是否正确
se.setAttribute("info", "密码不正确");
}else if(user.getType().equals("1")){
se.setAttribute("login", user);
fd="admin.jsp";//管理员
}else{
se.setAttribute("login", user);
fd="guest.jsp";//普通用户
}
req.getRequestDispatcher(fd).forward(req, resp);//重定向
3 视图的安全控制
在进行完Servlet文件处理后,根据session中的用户信息来决定用户是否登录和用户的权限。只有管理员才可以进入到admin.jsp管理员界面,实现管理操作,如果用户没有登录,则返回到login.jsp登录界面;如果当前用户为普通用户,则进入到guest.jsp普通用户界面。用于安全控制的checkuser.jsp页面代码如下:
通过视图的安全控制,可以防止一些非法用户进入到本系统中的界面中,现实视图层的安全机制。
4 过滤器的安全控制
过滤器(filter)是一个对象,它用来在源数据和目的地数据之间截获信息,然后对在它们之间传递的数据进行过滤,也就是说当访问Servlet过滤器所对应的Servlet时,会先执行Servlet过滤器,对请求和响应的信息进行过滤。如图2所示。
图2过滤器的过滤功能
过滤器可以提高系统的安全性,可以使用户在调用Servlet登录功能之前对用户信息进行过滤,将一些非法信息过滤掉,提高系统的运行效率。UserLoginFilter过滤器是用于验证session是否含有用户信息,以判断用户是否登录和用户权限。其doFilter()方法的核心代码:
HttpServletRequest rq=(HttpServletRequest) req;
HttpServletResponse re=(HttpServletResponse) resp;
HttpSession session=rq.getSession();//获得session对象
UserBean user=(UserBean)session.getAttribute("login");
if(user==null){//判断用户登录信息
re.sendRedirect("login.jsp");
}else if(user.getType().equals("0")){//普通用户进入到普通界面
re.sendRedirect("guest.jsp");
}else{//管理员进入到管理界面
re.sendRedirect("admin.jsp");
}
我们可能编写多个过滤器,现实一条过滤链,可以将用户信息逐一进行过滤最后保证请求和响应的信息安全。
5 结论
运用Java Web技术实现了视图验证、过滤器验证和Servlet登录功能的验证,可以使用户登录系统的安全性得以提高,防止恶意用户登录到系统中。当然系统安全是一个复杂的问题,本文希望能起着“抛砖引玉”的作用,为日后设计和开发Web应用程序时提供给大家一点启发和思路。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文